<!DOCTYPE html> 
<html lang="en-US" xml:lang="en-US" > 
<head><title>Configuration</title> 
<meta  charset="utf-8" /> 
<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)" /> 
<meta name="viewport" content="width=device-width,initial-scale=1" /> 
<link rel="stylesheet" type="text/css" href="Configuration.css" /> 
<meta name="src" content="Configuration.tex" /> 
<link rel="stylesheet" type="text/css" href="../main.css" /></head><body 
>
<!--l. 81--><p class="noindent" >
                                                                                                  
                                                                                                  
</p>
<div class="center" 
>
<!--l. 82--><p class="noindent" >
</p><!--l. 89--><p class="noindent" > <img 
src="Logos/Logo-.png" alt="PIC"  
width="160" height="160"  />
</p><!--l. 93--><p class="noindent" ><span 
class="ec-lmssbx-10x-x-248">OpenCore</span>
</p><!--l. 97--><p class="noindent" ><span 
class="ec-lmss-17x-x-143">Reference Manual (0.6.3)</span>
</p><!--l. 101--><p class="noindent" ><span 
class="ec-lmss-17x-x-143">[2020.10.07]</span>
</p><!--l. 109--><p class="noindent" >Copyright <span 
class="ts1-lmr10-">©</span>2018-2020 vit9696
</p>
</div>
                                                                                                  
                                                                                                  
<a 
 id="Q1-1-1"></a>
                                                                                                  
                                                                                                  
<h3 class="likesectionHead"><a 
 id="x1-1000"></a>Contents</h3>
<div class="tableofcontents">
<span class="sectionToc" >1 <a 
href="#x1-20001" id="QQ2-1-3">Introduction</a></span>
<br /> <span class="subsectionToc" >1.1 <a 
href="#x1-30001" id="QQ2-1-4">Generic Terms</a></span>
<br /><span class="sectionToc" >2 <a 
href="#x1-40002" id="QQ2-1-5">Configuration</a></span>
<br /> <span class="subsectionToc" >2.1 <a 
href="#x1-50001" id="QQ2-1-6">Configuration Terms</a></span>
<br /> <span class="subsectionToc" >2.2 <a 
href="#x1-60002" id="QQ2-1-7">Configuration Processing</a></span>
<br /> <span class="subsectionToc" >2.3 <a 
href="#x1-70003" id="QQ2-1-8">Configuration Structure</a></span>
<br /><span class="sectionToc" >3 <a 
href="#x1-80003" id="QQ2-1-9">Setup</a></span>
<br /> <span class="subsectionToc" >3.1 <a 
href="#x1-90001" id="QQ2-1-10">Directory Structure</a></span>
<br /> <span class="subsectionToc" >3.2 <a 
href="#x1-100002" id="QQ2-1-11">Installation and Upgrade</a></span>
<br /> <span class="subsectionToc" >3.3 <a 
href="#x1-110003" id="QQ2-1-12">Contribution</a></span>
<br /> <span class="subsectionToc" >3.4 <a 
href="#x1-120004" id="QQ2-1-15">Coding conventions</a></span>
<br /> <span class="subsectionToc" >3.5 <a 
href="#x1-130005" id="QQ2-1-16">Debugging</a></span>
<br /><span class="sectionToc" >4 <a 
href="#x1-140004" id="QQ2-1-17">ACPI</a></span>
<br /> <span class="subsectionToc" >4.1 <a 
href="#x1-150001" id="QQ2-1-18">Introduction</a></span>
<br /> <span class="subsectionToc" >4.2 <a 
href="#x1-160002" id="QQ2-1-19">Properties</a></span>
<br /> <span class="subsectionToc" >4.3 <a 
href="#x1-170003" id="QQ2-1-20">Add Properties</a></span>
<br /> <span class="subsectionToc" >4.4 <a 
href="#x1-180004" id="QQ2-1-21">Delete Properties</a></span>
<br /> <span class="subsectionToc" >4.5 <a 
href="#x1-190005" id="QQ2-1-22">Patch Properties</a></span>
<br /> <span class="subsectionToc" >4.6 <a 
href="#x1-200006" id="QQ2-1-23">Quirks Properties</a></span>
<br /><span class="sectionToc" >5 <a 
href="#x1-210005" id="QQ2-1-24">Booter</a></span>
<br /> <span class="subsectionToc" >5.1 <a 
href="#x1-220001" id="QQ2-1-25">Introduction</a></span>
<br /> <span class="subsectionToc" >5.2 <a 
href="#x1-230002" id="QQ2-1-26">Properties</a></span>
<br /> <span class="subsectionToc" >5.3 <a 
href="#x1-240003" id="QQ2-1-27">MmioWhitelist Properties</a></span>
<br /> <span class="subsectionToc" >5.4 <a 
href="#x1-250004" id="QQ2-1-28">Quirks Properties</a></span>
<br /><span class="sectionToc" >6 <a 
href="#x1-260006" id="QQ2-1-29">DeviceProperties</a></span>
<br /> <span class="subsectionToc" >6.1 <a 
href="#x1-270001" id="QQ2-1-30">Introduction</a></span>
<br /> <span class="subsectionToc" >6.2 <a 
href="#x1-280002" id="QQ2-1-31">Properties</a></span>
<br /> <span class="subsectionToc" >6.3 <a 
href="#x1-290003" id="QQ2-1-32">Common Properties</a></span>
<br /><span class="sectionToc" >7 <a 
href="#x1-300007" id="QQ2-1-33">Kernel</a></span>
<br /> <span class="subsectionToc" >7.1 <a 
href="#x1-310001" id="QQ2-1-34">Introduction</a></span>
<br /> <span class="subsectionToc" >7.2 <a 
href="#x1-320002" id="QQ2-1-35">Properties</a></span>
<br /> <span class="subsectionToc" >7.3 <a 
href="#x1-330003" id="QQ2-1-36">Add Properties</a></span>
<br /> <span class="subsectionToc" >7.4 <a 
href="#x1-340004" id="QQ2-1-37">Block Properties</a></span>
<br /> <span class="subsectionToc" >7.5 <a 
href="#x1-350005" id="QQ2-1-38">Emulate Properties</a></span>
<br /> <span class="subsectionToc" >7.6 <a 
href="#x1-360006" id="QQ2-1-39">Force Properties</a></span>
<br /> <span class="subsectionToc" >7.7 <a 
href="#x1-370007" id="QQ2-1-40">Patch Properties</a></span>
                                                                                                  
                                                                                                  
<br /> <span class="subsectionToc" >7.8 <a 
href="#x1-380008" id="QQ2-1-41">Quirks Properties</a></span>
<br /> <span class="subsectionToc" >7.9 <a 
href="#x1-390009" id="QQ2-1-42">Scheme Properties</a></span>
<br /><span class="sectionToc" >8 <a 
href="#x1-400008" id="QQ2-1-43">Misc</a></span>
<br /> <span class="subsectionToc" >8.1 <a 
href="#x1-410001" id="QQ2-1-44">Introduction</a></span>
<br /> <span class="subsectionToc" >8.2 <a 
href="#x1-420002" id="QQ2-1-45">Properties</a></span>
<br /> <span class="subsectionToc" >8.3 <a 
href="#x1-430003" id="QQ2-1-46">Boot Properties</a></span>
<br /> <span class="subsectionToc" >8.4 <a 
href="#x1-440004" id="QQ2-1-47">Debug Properties</a></span>
<br /> <span class="subsectionToc" >8.5 <a 
href="#x1-450005" id="QQ2-1-48">Security Properties</a></span>
<br /> <span class="subsectionToc" >8.6 <a 
href="#x1-460006" id="QQ2-1-49">Entry Properties</a></span>
<br /><span class="sectionToc" >9 <a 
href="#x1-470009" id="QQ2-1-50">NVRAM</a></span>
<br /> <span class="subsectionToc" >9.1 <a 
href="#x1-480001" id="QQ2-1-51">Introduction</a></span>
<br /> <span class="subsectionToc" >9.2 <a 
href="#x1-490002" id="QQ2-1-52">Properties</a></span>
<br /> <span class="subsectionToc" >9.3 <a 
href="#x1-500003" id="QQ2-1-53">Mandatory Variables</a></span>
<br /> <span class="subsectionToc" >9.4 <a 
href="#x1-510004" id="QQ2-1-54">Recommended Variables</a></span>
<br /> <span class="subsectionToc" >9.5 <a 
href="#x1-520005" id="QQ2-1-55">Other Variables</a></span>
<br /><span class="sectionToc" >10 <a 
href="#x1-5300010" id="QQ2-1-56">PlatformInfo</a></span>
<br /> <span class="subsectionToc" >10.1 <a 
href="#x1-540001" id="QQ2-1-57">Properties</a></span>
<br /> <span class="subsectionToc" >10.2 <a 
href="#x1-550002" id="QQ2-1-58">Generic Properties</a></span>
<br /> <span class="subsectionToc" >10.3 <a 
href="#x1-560003" id="QQ2-1-59">DataHub Properties</a></span>
<br /> <span class="subsectionToc" >10.4 <a 
href="#x1-570004" id="QQ2-1-60">PlatformNVRAM Properties</a></span>
<br /> <span class="subsectionToc" >10.5 <a 
href="#x1-580005" id="QQ2-1-61">SMBIOS Properties</a></span>
<br /><span class="sectionToc" >11 <a 
href="#x1-5900011" id="QQ2-1-62">UEFI</a></span>
<br /> <span class="subsectionToc" >11.1 <a 
href="#x1-600001" id="QQ2-1-63">Introduction</a></span>
<br /> <span class="subsectionToc" >11.2 <a 
href="#x1-610002" id="QQ2-1-64">Drivers</a></span>
<br /> <span class="subsectionToc" >11.3 <a 
href="#x1-620003" id="QQ2-1-65">Tools and Applications</a></span>
<br /> <span class="subsectionToc" >11.4 <a 
href="#x1-630004" id="QQ2-1-67">OpenCanopy</a></span>
<br /> <span class="subsectionToc" >11.5 <a 
href="#x1-640005" id="QQ2-1-68">OpenRuntime</a></span>
<br /> <span class="subsectionToc" >11.6 <a 
href="#x1-650006" id="QQ2-1-69">Properties</a></span>
<br /> <span class="subsectionToc" >11.7 <a 
href="#x1-660007" id="QQ2-1-70">APFS Properties</a></span>
<br /> <span class="subsectionToc" >11.8 <a 
href="#x1-670008" id="QQ2-1-71">Audio Properties</a></span>
<br /> <span class="subsectionToc" >11.9 <a 
href="#x1-680009" id="QQ2-1-72">Input Properties</a></span>
<br /> <span class="subsectionToc" >11.10 <a 
href="#x1-6900010" id="QQ2-1-73">Output Properties</a></span>
<br /> <span class="subsectionToc" >11.11 <a 
href="#x1-7000011" id="QQ2-1-74">ProtocolOverrides Properties</a></span>
<br /> <span class="subsectionToc" >11.12 <a 
href="#x1-7100012" id="QQ2-1-75">Quirks Properties</a></span>
<br /> <span class="subsectionToc" >11.13 <a 
href="#x1-7200013" id="QQ2-1-76">ReservedMemory Properties</a></span>
<br /><span class="sectionToc" >12 <a 
href="#x1-7300012" id="QQ2-1-77">Troubleshooting</a></span>
<br /> <span class="subsectionToc" >12.1 <a 
href="#x1-740001" id="QQ2-1-78">Legacy Apple OS</a></span>
<br /> <span class="subsectionToc" >12.2 <a 
href="#x1-800002" id="QQ2-1-84">UEFI Secure Boot</a></span>
                                                                                                  
                                                                                                  
<br /> <span class="subsectionToc" >12.3 <a 
href="#x1-810003" id="QQ2-1-85">Windows support</a></span>
<br /> <span class="subsectionToc" >12.4 <a 
href="#x1-820004" id="QQ2-1-87">Debugging</a></span>
<br /> <span class="subsectionToc" >12.5 <a 
href="#x1-830005" id="QQ2-1-88">Tips and Tricks</a></span>
</div>
<a 
 id="x1-1001r1"></a>
<h3 class="sectionHead"><span class="titlemark">1   </span> <a 
 id="x1-20001"></a>Introduction</h3>
<!--l. 118--><p class="noindent" >This document provides information on <a 
href="https://github.com/acidanthera/OpenCorePkg" >OpenCore</a> user configuration file format used to set up the correct functioning of
the macOS operating system. It is to be read as the official clarification of expected OpenCore behaviour. All
deviations, if found in published OpenCore releases, shall be considered to be documentation or implementation
bugs which should be reported via the <a 
href="https://github.com/acidanthera/bugtracker" >Acidanthera Bugtracker</a>. An errata sheet is available in <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Errata/Errata.pdf" >OpenCorePkg
repository</a>.
</p><!--l. 128--><p class="noindent" >This document is structured as a specification and is not meant to provide a step-by-step guide to configuring an end-user
Board Support Package (BSP). The intended audience of the document is anticipated to be programmers and engineers with a
basic understanding of macOS internals and UEFI functionality. For these reasons, this document is available
exclusively in English, and all other sources or translations of this document are unofficial and may contain
errors.
</p><!--l. 135--><p class="noindent" >Third-party articles, utilities, books, and alike, may be more useful for a wider audience as they could provide
guide-like material. However, they are subject to their authors’ preferences, tastes, misinterpretations of this
document, and unavoidable obsolescence. In cases of using such sources, such as <a 
href="https://dortania.github.io" >Dortania</a>’s <a 
href="https://dortania.github.io/OpenCore-Install-Guide" >OpenCore Install
Guide</a> and <a 
href="https://dortania.github.io/getting-started" >related material</a>, please refer back to this document on every decision made and re-evaluate potential
consequences.
</p><!--l. 143--><p class="noindent" >Please note that regardless of the sources used, users are required to fully understand every OpenCore configuration option,
and the principles behind them, before posting issues to the <a 
href="https://github.com/acidanthera/bugtracker" >Acidanthera Bugtracker</a>.
<a 
 id="x1-2001r1"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">1.1   </span> <a 
 id="x1-30001"></a>Generic Terms</h4>
     <ul class="itemize1">
     <li class="itemize"><span 
class="ec-lmtt-10">plist </span>—  Subset  of  ASCII  Property  List  format  written  in  XML,  also  know  as  XML  plist  format  version
     1.  Uniform  Type  Identifier  (UTI):  <span 
class="ec-lmtt-10">com.apple.property-list</span>.  Plists  consist  of  <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> objects</span>,  which  are
     combined to form a hierarchical structure. Due to plist format not being well-defined, all the definitions of this
     document may only be applied after plist is considered valid by running <span 
class="ec-lmtt-10">plutil</span><span 
class="ec-lmtt-10"> -lint</span>. External references:
     https://www.apple.com/DTDs/PropertyList-1.0.dtd, <span 
class="ec-lmtt-10">man</span><span 
class="ec-lmtt-10"> plutil</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> type </span>— plist collections (<span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> array</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> dictionary</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> key</span>) and primitives (<span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> string</span>,
     <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> data</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> date</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> boolean</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> integer</span>, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> real</span>).
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>— definite realisation of <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> type</span>, which may be interpreted as value.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> array </span>— array-like collection, conforms to <span 
class="ec-lmtt-10">array</span>. Consists of zero or more <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> objects</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> dictionary </span>—  map-like  (associative  array)  collection,  conforms  to  <span 
class="ec-lmtt-10">dict</span>.  Consists  of  zero  or  more
     <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> keys</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> key </span>— contains one <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>going by the name of <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> key</span>, conforms to <span 
class="ec-lmtt-10">key</span>. Consists of printable
     7-bit ASCII characters.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> string </span>— printable 7-bit ASCII string, conforms to <span 
class="ec-lmtt-10">string</span>.
                                                                                                  
                                                                                                  
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> data </span>— base64-encoded blob, conforms to <span 
class="ec-lmtt-10">data</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> date </span>— ISO-8601 date, conforms to <span 
class="ec-lmtt-10">date</span>, unsupported.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> boolean </span>— logical state object, which is either true (1) or false (0), conforms to <span 
class="ec-lmtt-10">true </span>and <span 
class="ec-lmtt-10">false</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> integer </span>— possibly signed integer number in base 10, conforms to <span 
class="ec-lmtt-10">integer</span>. Fits in 64-bit unsigned integer
     in two’s complement representation, unless a smaller signed or unsigned integral type is explicitly mentioned in
     specific <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>description.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> real </span>— floating point number, conforms to <span 
class="ec-lmtt-10">real</span>, unsupported.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> metadata </span>— value cast to data by the implementation. Permits passing <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> string</span>, in which case the
     result is represented by a null-terminated sequence of bytes (aka C string), <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> integer</span>, in which case the
     result is represented by <span 
class="ec-lmri-10">32-bit </span>little endian sequence of bytes in two’s complement representation, <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> boolean</span>,
     in which case the value is one byte: <span 
class="ec-lmtt-10">01 </span>for <span 
class="ec-lmtt-10">true </span>and <span 
class="ec-lmtt-10">00 </span>for <span 
class="ec-lmtt-10">false</span>, and <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> data </span>itself. All other types or
     larger integers invoke undefined behaviour.</li></ul>
<a 
 id="x1-3001r3"></a>
<h3 class="sectionHead"><span class="titlemark">2   </span> <a 
 id="x1-40002"></a>Configuration</h3>
<a 
 id="x1-4001r4"></a>
<h4 class="subsectionHead"><span class="titlemark">2.1   </span> <a 
 id="x1-50001"></a>Configuration Terms</h4>
     <ul class="itemize1">
     <li class="itemize"><span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>— OpenCore Configuration file in <span 
class="ec-lmtt-10">plist </span>format named <span 
class="ec-lmtt-10">config.plist</span>. It has to provide extensible
     way to configure OpenCore and is structured to be separated into multiple named sections situated in the root
     <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> dictionary</span>. These sections are permitted to have <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> array </span>or <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> dictionary </span>types and are
     described in corresponding sections of this document.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> key </span>— <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> key </span>object of <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>described in this document or its future revisions. Besides explicitly
     described <span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> keys</span>, keys starting with <span 
class="ec-lmtt-10"># </span>symbol (e.g. <span 
class="ec-lmtt-10">#Hello</span>) are also considered <span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> keys </span>and behave
     as comments, effectively discarding their value, which is still required to be a valid <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object</span>. All other
     <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> keys </span>are not valid, and their presence yields to <span 
class="ec-lmtt-10">undefined</span><span 
class="ec-lmtt-10"> behaviour</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> value </span>— valid <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>of <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>described in this document that matches all the additional
     requirements in specific <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>description if any.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value </span>— valid <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>of <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>described in this document that is of other <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> type</span>,
     does not conform to additional requirements found in specific <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>description (e.g. value range), or
     missing from the corresponding collection. <span 
class="ec-lmtt-10">Invalid</span><span 
class="ec-lmtt-10"> value </span>is read with or without an error message as any
     possible value of this <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>in an undetermined manner (i.e. the values may not be same across the
     reboots). Whilst reading an <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value </span>is equivalent to reading certain defined <span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> value</span>, applying
     incompatible value to the host system may yield to <span 
class="ec-lmtt-10">undefined</span><span 
class="ec-lmtt-10"> behaviour</span>.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">optional</span><span 
class="ec-lmtt-10"> value </span>— <span 
class="ec-lmtt-10">valid</span><span 
class="ec-lmtt-10"> value </span>of <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>described in this document that reads in a certain defined manner
     provided in specific <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object </span>description (instead of <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value</span>) when not present in <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config</span>. All
     other cases of <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value </span>do still apply. Unless explicitly marked as <span 
class="ec-lmtt-10">optional</span><span 
class="ec-lmtt-10"> value</span>, any other value is
     required to be present and reads to <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value </span>if missing.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">fatal</span><span 
class="ec-lmtt-10"> behaviour </span>— behaviour leading to boot termination. Implementation must stop the boot process from
     going any further until next host system boot. It is allowed but not required to perform cold reboot or show any
     warning message.
                                                                                                  
                                                                                                  
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">undefined</span><span 
class="ec-lmtt-10"> behaviour </span>— behaviour not prescribed by this document. Implementation is allowed to take any
     measures including but not limited to <span 
class="ec-lmtt-10">fatal</span><span 
class="ec-lmtt-10"> behaviour</span>, assuming any states or values, or ignoring, unless these
     measures negatively affect system security in general.</li></ul>
<a 
 id="x1-5001r6"></a>
<h4 class="subsectionHead"><span class="titlemark">2.2   </span> <a 
 id="x1-60002"></a>Configuration Processing</h4>
<!--l. 276--><p class="noindent" ><span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>is guaranteed to be processed at least once if it was found. Depending on OpenCore bootstrapping mechanism
multiple <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>files may lead to reading any of them. No <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> Config </span>may be present on disk, in which case all the values
read follow the rules of <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> value </span>and <span 
class="ec-lmtt-10">optional</span><span 
class="ec-lmtt-10"> value</span>.
</p><!--l. 283--><p class="noindent" ><span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>has size, nesting, and key amount limitations. <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>size does not exceed <span 
class="ec-lmtt-10">16</span><span 
class="ec-lmtt-10"> MBs</span>. <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>has no more
than <span 
class="ec-lmtt-10">8 </span>nesting levels. <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>has up to <span 
class="ec-lmtt-10">16384 </span>XML nodes (i.e. one <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> dictionary </span>item is counted as a pair of nodes)
within each <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> object</span>.
</p><!--l. 290--><p class="noindent" >Reading malformed <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>file leads to <span 
class="ec-lmtt-10">undefined</span><span 
class="ec-lmtt-10"> behaviour</span>. Examples of malformed <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>cover at least the
following cases:
</p>
     <ul class="itemize1">
     <li class="itemize">files non-conformant to <span 
class="ec-lmtt-10">plist </span>DTD
     </li>
     <li class="itemize">files with unsupported or non-conformant <span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> objects </span>found in this document
     </li>
     <li class="itemize">files violating size, nesting, and key amount limitations</li></ul>
<!--l. 305--><p class="noindent" >It is recommended but not required to abort loading malformed <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>and continue as if no <span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>was present. For
forward compatibility it is recommended but not required for the implementation to warn about the use of
<span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> values</span>. Recommended practice of interpreting <span 
class="ec-lmtt-10">invalid</span><span 
class="ec-lmtt-10"> values </span>is to conform to the following convention where
applicable:
</p>
<div class="center" 
>
<!--l. 313--><p class="noindent" >
</p>
<div class="tabular"> <table id="TBL-1" class="tabular" 
 
><colgroup id="TBL-1-1g"><col 
id="TBL-1-1" /></colgroup><colgroup id="TBL-1-2g"><col 
id="TBL-1-2" /></colgroup><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-1-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-1-1"  
class="td11"><span 
class="ec-lmbx-10">Type            </span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-1-2"  
class="td11"><span 
class="ec-lmbx-10">Value                                  </span></td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-2-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-2-1"  
class="td11"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> string  </span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-2-2"  
class="td11">Empty string (<span 
class="ec-lmtt-10">&#x003C;string&#x003E;&#x003C;/string&#x003E;</span>)</td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-3-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-3-1"  
class="td11"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> data    </span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-3-2"  
class="td11">Empty data (<span 
class="ec-lmtt-10">&#x003C;data&#x003E;&#x003C;/data&#x003E;</span>)        </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-4-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-4-1"  
class="td11"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> integer </span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-4-2"  
class="td11">0 (<span 
class="ec-lmtt-10">&#x003C;integer&#x003E;0&#x003C;/integer&#x003E;</span>)           </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-5-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-5-1"  
class="td11"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> boolean </span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-5-2"  
class="td11">False (<span 
class="ec-lmtt-10">&#x003C;false/&#x003E;</span>)                         </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-6-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-6-1"  
class="td11"><span 
class="ec-lmtt-10">plist</span><span 
class="ec-lmtt-10"> tristate</span></td><td  style="white-space:nowrap; text-align:left;" id="TBL-1-6-2"  
class="td11">False (<span 
class="ec-lmtt-10">&#x003C;false/&#x003E;</span>)                         </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-1-7-"><td  style="white-space:nowrap; text-align:left;" id="TBL-1-7-1"  
class="td11">              </td>
</tr></table></div></div>
<a 
 id="x1-6001r7"></a>
<h4 class="subsectionHead"><span class="titlemark">2.3   </span> <a 
 id="x1-70003"></a>Configuration Structure</h4>
<!--l. 338--><p class="noindent" ><span 
class="ec-lmtt-10">OC</span><span 
class="ec-lmtt-10"> config </span>is separated into following sections, which are described in separate sections of this document. By default it is tried
to not enable anything and optionally provide kill switches with <span 
class="ec-lmtt-10">Enable </span>property for <span 
class="ec-lmtt-10">plist dict </span>entries. In general the
configuration is written idiomatically to group similar actions in subsections:
</p>
     <ul class="itemize1">
     <li class="itemize"><span 
class="ec-lmtt-10">Add </span>provides support for data addition. Existing data will not be overridden, and needs to be handled separately
     with <span 
class="ec-lmtt-10">Delete </span>if necessary.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">Delete </span>provides support for data removal.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">Patch </span>provides support for data modification.
     </li>
     <li class="itemize"><span 
class="ec-lmtt-10">Quirks </span>provides support for specific hacks.</li></ul>
                                                                                                  
                                                                                                  
<!--l. 358--><p class="noindent" >Root configuration entries consist of the following:
</p>
     <ul class="itemize1">
     <li class="itemize"><a 
href="#x1-140004"><span 
class="ec-lmtt-10">ACPI</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-210005"><span 
class="ec-lmtt-10">Booter</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-260006"><span 
class="ec-lmtt-10">DeviceProperties</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-300007"><span 
class="ec-lmtt-10">Kernel</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-400008"><span 
class="ec-lmtt-10">Misc</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-470009"><span 
class="ec-lmtt-10">NVRAM</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-5300010"><span 
class="ec-lmtt-10">PlatformInfo</span></a>
     </li>
     <li class="itemize"><a 
href="#x1-5900011"><span 
class="ec-lmtt-10">UEFI</span></a></li></ul>
<!--l. 380--><p class="noindent" >It is possible to perform basic validation of the configuration by using <span 
class="ec-lmtt-10">ocvalidate </span>utility. Please note, that <span 
class="ec-lmtt-10">ocvalidate</span>
must match the used OpenCore release and may not be able to detect all configuration flaws present in the
file.
</p><!--l. 385--><p class="noindent" ><span 
class="ec-lmri-10">Note</span>: Currently most properties try to have defined values even if not specified in the configuration for safety reasons. This
behaviour should not be relied upon, and all fields must be properly specified in the configuration.
<a 
 id="x1-7001r5"></a>
</p>
<h3 class="sectionHead"><span class="titlemark">3   </span> <a 
 id="x1-80003"></a>Setup</h3>
<a 
 id="x1-8001r8"></a>
<h4 class="subsectionHead"><span class="titlemark">3.1   </span> <a 
 id="x1-90001"></a>Directory Structure</h4>
<div class="center" 
>
The directory structure was unable to be rendered and was therefore removed.</div>
<!--l. 487--><p class="noindent" >When directory boot is used the directory structure used should follow the description on <a 
href="#x1-90001">Directory Structure</a> figure. Available
entries include:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">BOOTx64.efi </tspan>and <tspan class="ec-lmtt-10">Bootstrap.efi </tspan><br 
class="newline" />Initial bootstrap loaders, which loads <tspan class="ec-lmtt-10">OpenCore.efi </tspan>unless it was already started as a driver. <tspan class="ec-lmtt-10">BOOTx64.efi </tspan>is
     loaded by the firmware by default according to UEFI specification, and <tspan class="ec-lmtt-10">Bootstrap.efi </tspan>can be registered as a
     custom option to let OpenCore coexist with operating systems using <tspan class="ec-lmtt-10">BOOTx64.efi </tspan>as their own loaders (e.g.
                                                                                                  
                                                                                                  
     Windows), see <tspan class="ec-lmtt-10">BootProtect </tspan>for more details.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">boot </tspan><br 
class="newline" />Duet bootstrap loader, which initialises UEFI environment on legacy BIOS firmwares and loads <tspan class="ec-lmtt-10">OpenCore.efi</tspan>
     similarly to other bootstrap loaders. Modern Duet bootstrap loader will default to <tspan class="ec-lmtt-10">OpenCore.efi </tspan>on the same
     partition when present.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">ACPI </tspan><br 
class="newline" />Directory used for storing supplemental ACPI information for <a 
href="#x1-140004"><tspan class="ec-lmtt-10">ACPI</tspan></a> section.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Drivers </tspan><br 
class="newline" />Directory used for storing supplemental <tspan class="ec-lmtt-10">UEFI </tspan>drivers for <a 
href="#x1-5900011"><tspan class="ec-lmtt-10">UEFI</tspan></a> section.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Kexts </tspan><br 
class="newline" />Directory used for storing supplemental kernel information for <a 
href="#x1-300007"><tspan class="ec-lmtt-10">Kernel</tspan></a> section.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Resources </tspan><br 
class="newline" />Directory  used  for  storing  media  resources,  such  as  audio  files  for  screen  reader  support.  See  <a 
href="#x1-670008"><tspan class="ec-lmtt-10">UEFI Audio</tspan>
     <tspan class="ec-lmtt-10">Properties</tspan></a> section for more details. This directory also contains image files for graphical user interface. See
     <a 
href="#x1-630004">OpenCanopy</a> section for more details.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Tools </tspan><br 
class="newline" />Directory used for storing supplemental tools.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">OpenCore.efi </tspan><br 
class="newline" />Main booter driver responsible for operating system loading.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">config.plist </tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OC Config</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">vault.plist </tspan><br 
class="newline" />Hashes for all files potentially loadable by <tspan class="ec-lmtt-10">OC Config</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">vault.sig </tspan><br 
class="newline" />Signature for <tspan class="ec-lmtt-10">vault.plist</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">SysReport </tspan><br 
class="newline" />Directory containing system reports generated by <tspan class="ec-lmtt-10">SysReport </tspan>option.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">nvram.plist </tspan><br 
class="newline" />OpenCore variable import file.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">opencore-YYYY-MM-DD-HHMMSS.txt </tspan><br 
class="newline" />OpenCore log file.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">panic-YYYY-MM-DD-HHMMSS.txt </tspan><br 
class="newline" />Kernel panic log file.</li></ul>
<!--l. 554--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: It is not guaranteed that paths longer than <tspan class="ec-lmtt-10">OC_STORAGE_SAFE_PATH_MAX </tspan>(128 characters including <br 
class="newline" /><tspan class="ec-lmtt-10">0</tspan>-terminator) will be accessible within OpenCore.
<a 
 id="x1-9001r10"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">3.2   </span> <a 
 id="x1-100002"></a>Installation and Upgrade</h4>
<!--l. 560--><p class="noindent" >To install OpenCore reflect the <a 
href="#x1-70003">Configuration Structure</a> described in the previous section on a EFI volume of
a GPT partition. While corresponding sections of this document do provide some information in regards to
external resources like ACPI tables, UEFI drivers, or kernel extensions (kexts), completeness of the matter is
out of the scope of this document. Information about kernel extensions may be found in a separate <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Kexts.md" >Kext List</a>
                                                                                                  
                                                                                                  
document available in OpenCore repository. Vaulting information is provided in <a 
href="#x1-450005">Security Properties</a> section of this
document.
</p><!--l. 572--><p class="noindent" ><tspan class="ec-lmtt-10">OC</tspan><tspan class="ec-lmtt-10"> config</tspan>, just like any property lists can be edited with any stock textual editor (e.g. nano, vim), but specialised software
may provide better experience. On macOS the preferred GUI application is <a 
href="https://developer.apple.com/xcode" >Xcode</a>. For a lightweight cross-platform and
open-source alternative <a 
href="https://github.com/corpnewt/ProperTree" >ProperTree</a> editor can be utilised.
</p><!--l. 580--><p class="noindent" >For BIOS booting a third-party UEFI environment provider will have to be used. <tspan class="ec-lmtt-10">OpenDuetPkg </tspan>is one of the known UEFI
environment providers for legacy systems. To run OpenCore on such a legacy system, <tspan class="ec-lmtt-10">OpenDuetPkg </tspan>can be installed with a
dedicated tool — BootInstall (bundled with OpenCore). <a 
href="https://github.com/corpnewt/gibMacOS" >Third-party utilities</a> can be used to perform this on systems other
than macOS.
</p><!--l. 587--><p class="noindent" >For upgrade purposes refer to <tspan class="ec-lmtt-10">Differences.pdf </tspan>document, providing the information about the changes affecting the
configuration compared to the previous release, and <tspan class="ec-lmtt-10">Changelog.md </tspan>document, containing the list of modifications across all
published updates.
<a 
 id="x1-10001r11"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">3.3   </span> <a 
 id="x1-110003"></a>Contribution</h4>
<!--l. 594--><p class="noindent" >OpenCore can be compiled as an ordinary <a 
href="https://github.com/tianocore/tianocore.github.io/wiki/EDK-II" >EDK II</a> package. Since <a 
href="https://github.com/tianocore/tianocore.github.io/wiki/UDK" >UDK</a> development was abandoned by TianoCore, OpenCore
requires the use of <a 
href="https://github.com/tianocore/tianocore.github.io/wiki/EDK-II#stable-tags" >EDK II Stable</a>. Currently supported EDK II release is hosted in <a 
href="https://github.com/acidanthera/audk" >acidanthera/audk</a>. The required patches for
the package are present in <tspan class="ec-lmtt-10">Patches </tspan>directory.
</p><!--l. 603--><p class="noindent" >The only officially supported toolchain is <tspan class="ec-lmtt-10">XCODE5</tspan>. Other toolchains might work, but are neither supported, nor recommended.
Contribution of clean patches is welcome. Please do follow <a 
href="https://github.com/tianocore/tianocore.github.io/wiki/Code-Style-C" >EDK II C Codestyle</a>.
</p><!--l. 608--><p class="noindent" >To compile with <tspan class="ec-lmtt-10">XCODE5</tspan>, besides <a 
href="https://developer.apple.com/xcode" >Xcode</a>, one should also install <a 
href="https://www.nasm.us" >NASM</a> and <a 
href="https://github.com/acidanthera/ocbuild/tree/master/external" >MTOC</a>. The latest Xcode version is recommended
for use despite the toolchain name. Example command sequence may look as follows:
</p>
<!--l. 614-->
<a 
 id="x1-11001r1"></a>
<a 
 id="x1-11002"></a>
<div class="lstlisting" id="listing-1"><span class="label"><a 
 id="x1-11003r1"></a></span><tspan class="ec-lmtk-10">git</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">clone</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">depth</tspan><tspan class="ec-lmtt-10">=1</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">https</tspan><tspan class="ec-lmtt-10">://</tspan><tspan class="ec-lmtt-10">github</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">com</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">acidanthera</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">audk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDK</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11004r2"></a></span><tspan class="ec-lmtk-10">cd</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDK</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11005r3"></a></span><tspan class="ec-lmtk-10">git</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">submodule</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">update</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">init</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">recommend</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">shallow</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11006r4"></a></span><tspan class="ec-lmtk-10">git</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">clone</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">depth</tspan><tspan class="ec-lmtt-10">=1</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">https</tspan><tspan class="ec-lmtt-10">://</tspan><tspan class="ec-lmtt-10">github</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">com</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">acidanthera</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11007r5"></a></span><tspan class="ec-lmtk-10">source</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">edksetup</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">sh</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11008r6"></a></span><tspan class="ec-lmtk-10">make</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">C</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">BaseTools</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11009r7"></a></span><tspan class="ec-lmtk-10">build</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">b</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RELEASE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">t</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">XCODE5</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dsc</tspan>
<figcaption class="caption" ><span class="id">Listing 1:</span><span  
class="content">Compilation Commands</span></figcaption><!--tex4ht:label?: x1-11001r -->
</div>
<!--l. 624--><p class="noindent" >For IDE usage Xcode projects are available in the root of the repositories. Another approach could be <a 
href="https://www.sublimetext.com" >Sublime Text</a> with
<a 
href="https://niosus.github.io/EasyClangComplete" >EasyClangComplete</a> plugin. Add <tspan class="ec-lmtt-10">.clang_complete </tspan>file with similar content to the UDK root:
</p>
<!--l. 629-->
<a 
 id="x1-11010r2"></a>
<a 
 id="x1-11011"></a>
<div class="lstlisting" id="listing-2"><span class="label"><a 
 id="x1-11012r1"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdePkg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11013r2"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11014r3"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11015r4"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdeModulePkg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11016r5"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdeModulePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11017r6"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdeModulePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11018r7"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">AMI</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11019r8"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Acidanthera</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11020r9"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Apple</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11021r10"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Apple</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11022r11"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Duet</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11023r12"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Generic</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11024r13"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Intel</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11025r14"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Microsoft</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11026r15"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenCorePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">VMware</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11027r16"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OvmfPkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11028r17"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">I</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">CpuPkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11029r18"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">IInclude</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11030r19"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">include</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11031r20"></a></span><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Include</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Ue</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">h</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11032r21"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">fshort</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">wchar</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11033r22"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wall</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11034r23"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wextra</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11035r24"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">unused</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">parameter</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11036r25"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">missing</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">braces</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11037r26"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">missing</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">eld</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">initializers</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11038r27"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">tautological</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">compare</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11039r28"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">sign</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">compare</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11040r29"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">varargs</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11041r30"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">Wno</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">unused</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">const</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">variable</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11042r31"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">DOC_TARGET_NOOPT</tspan><tspan class="ec-lmtt-10">=1</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-11043r32"></a></span><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">DNO_MSABI_VA_FUNCS</tspan><tspan class="ec-lmtt-10">=1</tspan>
<figcaption class="caption" ><span class="id">Listing 2:</span><span  
class="content">ECC Configuration</span></figcaption><!--tex4ht:label?: x1-11010r -->
</div>
<!--l. 664--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: Tool developers modifying <tspan class="ec-lmtt-10">config.plist </tspan>or any other OpenCore files must ensure that their tool checks for
<tspan class="ec-lmtt-10">opencore-version </tspan>NVRAM variable (see <a 
href="#x1-440004">Debug Properties</a> section below) and warn the user if the version listed is
unsupported or prerelease. OpenCore configuration may change across the releases and the tool shall ensure that it carefully
follows this document. Failure to do so may result in this tool to be considered as malware and blocked with all possible
means.
<a 
 id="x1-11044r12"></a>
                                                                                                  
                                                                                                  
</p>
<h4 class="subsectionHead"><span class="titlemark">3.4   </span> <a 
 id="x1-120004"></a>Coding conventions</h4>
<!--l. 674--><p class="noindent" >Just like any other project we have conventions that we follow during the development. All third-party contributors are highly
recommended to read and follow the conventions listed below before submitting their patches. In general it is also
recommended to firstly discuss the issue in <a 
href="https://github.com/acidanthera/bugtracker" >Acidanthera Bugtracker</a> before sending the patch to ensure no double work and to
avoid the patch being rejected.
</p><!--l. 680--><p class="noindent" ><tspan class="ec-lmbx-10">Organisation</tspan>. The codebase is contained in <tspan class="ec-lmtt-10">OpenCorePkg </tspan>repository, which is the primary EDK II package.
</p>
     <ul class="itemize1">
     <li class="itemize">Whenever changes are required in multiple repositories, separate pull requests should be sent to each.
     </li>
     <li class="itemize">Committing the changes should happen firstly to dependent repositories, secondly to primary repositories to
     avoid automatic build errors.
     </li>
     <li class="itemize">Each unique commit should compile with <tspan class="ec-lmtt-10">XCODE5 </tspan>and preferably with other toolchains. In the majority of the
     cases it can be checked by accessing the <a 
href="https://travis-ci.com/acidanthera" >CI interface</a>. Ensuring that static analysis finds no warnings is preferred.
     </li>
     <li class="itemize">External pull requests and tagged commits must be validated. That said, commits in master may build but may
     not necessarily work.
     </li>
     <li class="itemize">Internal branches should be named as follows: <tspan class="ec-lmtt-10">author-name-date</tspan>, e.g. <tspan class="ec-lmtt-10">vit9696-ballooning-20191026</tspan>.
     </li>
     <li class="itemize">Commit messages should be prefixed with the primary module (e.g. library or code module) the changes were
     made in. For example, <tspan class="ec-lmtt-10">OcGuardLib: Add OC_ALIGNED macro</tspan>. For non-library changes <tspan class="ec-lmtt-10">Docs </tspan>or <tspan class="ec-lmtt-10">Build </tspan>prefixes
     are used.</li></ul>
<!--l. 701--><p class="noindent" ><tspan class="ec-lmbx-10">Design</tspan>. The codebase is written in a subset of freestanding C11 (C17) supported by most modern toolchains used by EDK II.
Applying common software development practices or requesting clarification is recommended if any particular case is not
discussed below. </p>
     <ul class="itemize1">
     <li class="itemize">Never rely on undefined behaviour and try to avoid implementation defined behaviour unless explicitly covered
     below (feel free to create an issue when a relevant case is not present).
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">OcGuardLib </tspan>to ensure safe integral arithmetics avoiding overflows. Unsigned wraparound should be relied
     on with care and reduced to the necessary amount.
     </li>
     <li class="itemize">Check  pointers  for  correct  alignment  with  <tspan class="ec-lmtt-10">OcGuardLib </tspan>and  do  not  rely  on  the  architecture  being  able  to
     dereference unaligned pointers.
     </li>
     <li class="itemize">Use flexible array members instead of zero-length or one-length arrays where necessary.
     </li>
     <li class="itemize">Use static assertions (<tspan class="ec-lmtt-10">STATIC_ASSERT</tspan>) for type and value assumptions, and runtime assertions (<tspan class="ec-lmtt-10">ASSERT</tspan>) for
     precondition and invariant sanity checking. Do not use runtime assertions to check for errors as they should never
     alter control flow and potentially be excluded.
     </li>
     <li class="itemize">Assume <tspan class="ec-lmtt-10">UINT32</tspan>/<tspan class="ec-lmtt-10">INT32 </tspan>to be <tspan class="ec-lmtt-10">int</tspan>-sized and use <tspan class="ec-lmtt-10">%u</tspan>, <tspan class="ec-lmtt-10">%d</tspan>, and <tspan class="ec-lmtt-10">%x </tspan>to print them.
     </li>
     <li class="itemize">Assume <tspan class="ec-lmtt-10">UINTN</tspan>/<tspan class="ec-lmtt-10">INTN </tspan>to be of unspecified size, and cast them to <tspan class="ec-lmtt-10">UINT64</tspan>/<tspan class="ec-lmtt-10">INT64 </tspan>for printing with <tspan class="ec-lmtt-10">%Lu</tspan>, <tspan class="ec-lmtt-10">%Ld </tspan>and so
     on as normal.
     </li>
     <li class="itemize">Do   not   rely   on   integer   promotions   for   numeric   literals.   Use   explicit   casts   when   the   type   is
     implementation-dependent or suffixes when type size is known. Assume <tspan class="ec-lmtt-10">U </tspan>for <tspan class="ec-lmtt-10">UINT32 </tspan>and <tspan class="ec-lmtt-10">ULL </tspan>for <tspan class="ec-lmtt-10">UINT64</tspan>.
     </li>
     <li class="itemize">Do ensure unsigned arithmetics especially in bitwise maths, shifts in particular.
     </li>
                                                                                                  
                                                                                                  
     <li class="itemize"><tspan class="ec-lmtt-10">sizeof </tspan>operator should take variables instead of types where possible to be error prone. Use <tspan class="ec-lmtt-10">ARRAY_SIZE </tspan>to
     obtain array size in elements. Use <tspan class="ec-lmtt-10">L_STR_LEN </tspan>and <tspan class="ec-lmtt-10">L_STR_SIZE </tspan>macros from <tspan class="ec-lmtt-10">OcStringLib </tspan>to obtain string literal
     sizes to ensure compiler optimisation.
     </li>
     <li class="itemize">Do not use <tspan class="ec-lmtt-10">goto </tspan>keyword. Prefer early <tspan class="ec-lmtt-10">return</tspan>, <tspan class="ec-lmtt-10">break</tspan>, or <tspan class="ec-lmtt-10">continue </tspan>after failing to pass error checking instead
     of nesting conditionals.
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">EFIAPI</tspan>, force UEFI calling convention, only in protocols, external callbacks between modules, and functions
     with variadic arguments.
     </li>
     <li class="itemize">Provide inline documentation to every added function, at least describing its inputs, outputs, precondition,
     postcondition, and giving a brief description.
     </li>
     <li class="itemize">Do not use <tspan class="ec-lmtt-10">RETURN_STATUS</tspan>. Assume <tspan class="ec-lmtt-10">EFI_STATUS </tspan>to be a matching superset that is to be always used when
     <tspan class="ec-lmtt-10">BOOLEAN </tspan>is not enough.
     </li>
     <li class="itemize">Security violations should halt the system or cause a forced reboot.</li></ul>
<!--l. 739--><p class="noindent" ><tspan class="ec-lmbx-10">Codestyle</tspan>. The codebase follows <a 
href="https://github.com/tianocore/tianocore.github.io/wiki/Code-Style-C" >EDK II codestyle</a> with few changes and clarifications. </p>
     <ul class="itemize1">
     <li class="itemize">Write inline documentation for the functions and variables only once: in headers, where a header prototype is
     available, and inline for <tspan class="ec-lmtt-10">static </tspan>variables and functions.
     </li>
     <li class="itemize">Use line length of 120 characters or less, preferably 100 characters.
     </li>
     <li class="itemize">Use spaces after casts, e.g. <tspan class="ec-lmtt-10">(VOID *)(UINTN) Variable</tspan>.
     </li>
     <li class="itemize">Use SPDX license headers as shown in <a 
href="https://github.com/acidanthera/bugtracker/issues/483" >acidanthera/bugtracker#483</a>.</li></ul>
<a 
 id="x1-12001r15"></a>
<h4 class="subsectionHead"><span class="titlemark">3.5   </span> <a 
 id="x1-130005"></a>Debugging</h4>
<!--l. 754--><p class="noindent" >The codebase incorporates EDK II debugging and few custom features to improve the experience. </p>
     <ul class="itemize1">
     <li class="itemize">Use module prefixes, 2-5 letters followed by a colon (<tspan class="ec-lmtt-10">:</tspan>), for debug messages. For <tspan class="ec-lmtt-10">OpenCorePkg </tspan>use <tspan class="ec-lmtt-10">OC:</tspan>, for
     libraries and drivers use their own unique prefixes.
     </li>
     <li class="itemize">Do not use dots (<tspan class="ec-lmtt-10">.</tspan>) in the end of debug messages and separate <tspan class="ec-lmtt-10">EFI_STATUS</tspan>, printed by <tspan class="ec-lmtt-10">%r</tspan>, with a hyphen (e.g.
     <tspan class="ec-lmtt-10">OCRAM: Allocation of %u bytes failed - %r\n</tspan>).
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">DEBUG_CODE_BEGIN () </tspan>and <tspan class="ec-lmtt-10">DEBUG_CODE_END () </tspan>constructions to guard debug checks that may potentially
     reduce the performance of release builds and are otherwise unnecessary.
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">DEBUG </tspan>macro to print debug messages during normal functioning, and <tspan class="ec-lmtt-10">RUNTIME_DEBUG </tspan>for debugging after
     <tspan class="ec-lmtt-10">EXIT_BOOT_SERVICES</tspan>.
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">DEBUG_VERBOSE </tspan>debug level to leave debug messages for future debugging of the code, which are currently
     not necessary. By default <tspan class="ec-lmtt-10">DEBUG_VERBOSE </tspan>messages are ignored even in <tspan class="ec-lmtt-10">DEBUG </tspan>builds.
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">DEBUG_INFO </tspan>debug level for all non critical messages (including errors) and <tspan class="ec-lmtt-10">DEBUG_BULK_INFO </tspan>for extensive
     messages that should not appear in NVRAM log that is heavily limited in size. These messages are ignored in
     <tspan class="ec-lmtt-10">RELEASE </tspan>builds.
     </li>
     <li class="itemize">Use <tspan class="ec-lmtt-10">DEBUG_ERROR </tspan>to print critical human visible messages that may potentially halt the boot process, and
     <tspan class="ec-lmtt-10">DEBUG_WARN </tspan>for all other human visible errors, <tspan class="ec-lmtt-10">RELEASE </tspan>builds included.</li></ul>
<!--l. 774--><p class="noindent" >When trying to find the problematic change it is useful to rely on <a 
href="https://git-scm.com/docs/git-bisect" ><tspan class="ec-lmtt-10">git-bisect</tspan></a> functionality. There also are some unofficial
resources that provide per-commit binary builds of OpenCore, like <a 
href="https://dortania.github.io/builds" >Dortania</a>.
                                                                                                  
                                                                                                  
<a 
 id="x1-13001r9"></a>
</p>
<h3 class="sectionHead"><span class="titlemark">4   </span> <a 
 id="x1-140004"></a>ACPI</h3>
<a 
 id="x1-14001r16"></a>
<h4 class="subsectionHead"><span class="titlemark">4.1   </span> <a 
 id="x1-150001"></a>Introduction</h4>
<!--l. 783--><p class="noindent" >ACPI (Advanced Configuration and Power Interface) is an open standard to discover and configure computer hardware. <a 
href="https://uefi.org/specifications" >ACPI
specification</a> defines the standard tables (e.g. <tspan class="ec-lmtt-10">DSDT</tspan>, <tspan class="ec-lmtt-10">SSDT</tspan>, <tspan class="ec-lmtt-10">FACS</tspan>, <tspan class="ec-lmtt-10">DMAR</tspan>) and various methods (e.g. <tspan class="ec-lmtt-10">_DSM</tspan>, <tspan class="ec-lmtt-10">_PRW</tspan>) for
implementation. Modern hardware needs little changes to maintain ACPI compatibility, yet some of those are provided as a
part of OpenCore.
</p><!--l. 791--><p class="noindent" >To compile and disassemble ACPI tables <a 
href="https://github.com/acpica/acpica" >iASL compiler</a> can be used developed by <a 
href="https://www.acpica.org" >ACPICA</a>. GUI front-end to iASL compiler
can be downloaded from <a 
href="https://github.com/acidanthera/MaciASL/releases" >Acidanthera/MaciASL</a>.
</p><!--l. 795--><p class="noindent" >ACPI changes apply globally (to every operating system) with the following effective order:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">Patch </tspan>is processed.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Delete </tspan>is processed.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Add </tspan>is processed.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Quirks </tspan>are processed.</li></ul>
<!--l. 805--><p class="noindent" >Applying the changes globally resolves the problems of incorrect operating system detection, which is not possible
before the operating system boots according to the ACPI specification, operating system chainloading, and
harder ACPI debugging. For this reason it may be required to carefully use <tspan class="ec-lmtt-10">_OSI </tspan>method when writing the
changes.
</p><!--l. 811--><p class="noindent" >Applying the patches early makes it possible to write so called “proxy” patches, where the original method is patched in the
original table and is implemented in the patched table.
</p><!--l. 815--><p class="noindent" >There are many places providing ACPI tables and workarounds. Commonly used ACPI tables are provided with OpenCore,
VirtualSMC, VoodooPS2, and WhateverGreen releases. Besides those there are several third-party instructions commonly
found on AppleLife in <a 
href="https://applelife.ru/forums/xakintosh.67" >Laboratory</a> and <a 
href="https://applelife.ru/forums/dsdt.129" >DSDT</a> subforums (e.g. <a 
href="https://applelife.ru/posts/498967" >Battery register splitting</a> guide). A slightly more user-friendly
explanation of some tables included with OpenCore can also be found in <a 
href="https://dortania.github.io" >Dortania</a>’s <a 
href="https://dortania.github.io/Getting-Started-With-ACPI" >Getting started with ACPI</a> guide. For
more exotic cases there also are several other places including <a 
href="https://github.com/daliansky" >daliansky</a>’s <a 
href="https://github.com/daliansky/OC-little" >ACPI sample collection</a>, but the quality of the
suggested solutions will vary from case to case.
<a 
 id="x1-15001r18"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">4.2   </span> <a 
 id="x1-160002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-16002x1"><tspan class="ec-lmtt-10">Add</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load selected tables from <tspan class="ec-lmtt-10">OC/ACPI </tspan>directory.
     <!--l. 839--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each add entry. See <a 
href="#x1-170003">Add Properties</a> section below.
     </p></li>
     <li 
  class="enumerate" id="x1-16004x2"><tspan class="ec-lmtt-10">Delete</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Remove selected tables from ACPI stack.
     <!--l. 848--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each delete entry. See <a 
href="#x1-180004">Delete Properties</a> section below.
     </p></li>
     <li 
  class="enumerate" id="x1-16006x3"><tspan class="ec-lmtt-10">Patch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Perform binary patches in ACPI tables before table addition or removal.
     <!--l. 858--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary </tspan>values describing each patch entry. See <a 
href="#x1-190005">Patch Properties</a> section
     below.
     </p></li>
     <li 
  class="enumerate" id="x1-16008x4"><tspan class="ec-lmtt-10">Quirks</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual ACPI quirks described in <a 
href="#x1-200006">Quirks Properties</a> section below.
     </li></ol>
<a 
 id="x1-16009r19"></a>
<h4 class="subsectionHead"><span class="titlemark">4.3   </span> <a 
 id="x1-170003"></a>Add Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-17002x1"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-17004x2"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This ACPI table will not be added unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-17006x3"><tspan class="ec-lmtt-10">Path</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:   File   paths   meant   to   be   loaded   as   ACPI   tables.   Example   values   include   <tspan class="ec-lmtt-10">DSDT.aml</tspan>,
     <tspan class="ec-lmtt-10">SubDir/SSDT-8.aml</tspan>, <tspan class="ec-lmtt-10">SSDT-USBX.aml</tspan>, etc.
     <!--l. 895--><p class="noindent" >ACPI table load order follows the item order in the array. All ACPI tables load from <tspan class="ec-lmtt-10">OC/ACPI </tspan>directory.
     </p><!--l. 898--><p class="noindent" ><tspan class="ec-lmbx-10">Note</tspan>: All tables but tables with <tspan class="ec-lmtt-10">DSDT </tspan>table identifier (determined by parsing data not by filename) insert new
     tables into ACPI stack. <tspan class="ec-lmtt-10">DSDT</tspan>, unlike the rest, performs replacement of DSDT table.
</p>
     </li></ol>
<a 
 id="x1-17007r20"></a>
<h4 class="subsectionHead"><span class="titlemark">4.4   </span> <a 
 id="x1-180004"></a>Delete Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-18002x1"><tspan class="ec-lmtt-10">All</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: If set to <tspan class="ec-lmtt-10">true</tspan>, all ACPI tables matching the condition will be deleted. Otherwise only first matched
     table.
     </li>
     <li 
  class="enumerate" id="x1-18004x2"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-18006x3"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This ACPI table will not be removed unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-18008x4"><tspan class="ec-lmtt-10">OemTableId</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table OEM ID to be equal to this value unless all zero.
     </li>
     <li 
  class="enumerate" id="x1-18010x5"><tspan class="ec-lmtt-10">TableLength</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table size to be equal to this value unless <tspan class="ec-lmtt-10">0</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-18012x6"><tspan class="ec-lmtt-10">TableSignature</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 4 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table signature to be equal to this value unless all zero.
     <!--l. 950--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Make sure not to specify table signature when the sequence needs to be replaced in multiple places.
     Especially when performing different kinds of renames.
</p>
     </li></ol>
<a 
 id="x1-18013r21"></a>
<h4 class="subsectionHead"><span class="titlemark">4.5   </span> <a 
 id="x1-190005"></a>Patch Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-19002x1"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-19004x2"><tspan class="ec-lmtt-10">Count</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Number of patch occurrences to apply. <tspan class="ec-lmtt-10">0 </tspan>applies the patch to all occurrences found.
     </li>
     <li 
  class="enumerate" id="x1-19006x3"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This ACPI patch will not be used unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-19008x4"><tspan class="ec-lmtt-10">Find</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data to find. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in size.
     </li>
     <li 
  class="enumerate" id="x1-19010x5"><tspan class="ec-lmtt-10">Limit</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Maximum number of bytes to search for. Can be set to <tspan class="ec-lmtt-10">0 </tspan>to look through the whole ACPI table.
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-19012x6"><tspan class="ec-lmtt-10">Mask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data bitwise mask used during find comparison. Allows fuzzy search by ignoring not masked (set
     to zero) bits. Can be set to empty data to be ignored. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in size otherwise.
     </li>
     <li 
  class="enumerate" id="x1-19014x7"><tspan class="ec-lmtt-10">OemTableId</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table OEM ID to be equal to this value unless all zero.
     </li>
     <li 
  class="enumerate" id="x1-19016x8"><tspan class="ec-lmtt-10">Replace</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Replacement data of one or more bytes.
     </li>
     <li 
  class="enumerate" id="x1-19018x9"><tspan class="ec-lmtt-10">ReplaceMask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data bitwise mask used during replacement. Allows fuzzy replacement by updating masked (set
     to non-zero) bits. Can be set to empty data to be ignored. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in size otherwise.
     </li>
     <li 
  class="enumerate" id="x1-19020x10"><tspan class="ec-lmtt-10">Skip</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Number of found occurrences to be skipped before replacement is done.
     </li>
     <li 
  class="enumerate" id="x1-19022x11"><tspan class="ec-lmtt-10">TableLength</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table size to be equal to this value unless <tspan class="ec-lmtt-10">0</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-19024x12"><tspan class="ec-lmtt-10">TableSignature</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 4 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Match table signature to be equal to this value unless all zero.
     </li></ol>
<!--l. 1049--><p class="noindent" >In the majority of the cases ACPI patches are not useful and harmful:
</p>
     <ul class="itemize1">
     <li class="itemize">Avoid renaming devices with ACPI patches. This may fail or perform improper renaming of unrelated devices
     (e.g. <tspan class="ec-lmtt-10">EC </tspan>and <tspan class="ec-lmtt-10">EC0</tspan>), be unnecessary, or even fail to rename devices in select tables. For ACPI consistency it is much
     safer to rename devices at I/O Registry level, as done by <a 
href="https://github.com/acidanthera/WhateverGreen" >WhateverGreen</a>.
     </li>
     <li class="itemize">Try to avoid patching <tspan class="ec-lmtt-10">_OSI </tspan>to support a higher level of feature sets whenever possible. Commonly this enables a
     number of hacks on APTIO firmwares, which result in the need to add more patches. Modern firmwares generally
     do not need it at all, and those that do are fine with much smaller patches. However, laptop vendors usually rely
     on this method to determine the availability of functions like modern I2C input support, thermal adjustment
     and custom feature additions.
     </li>
     <li class="itemize">Avoid patching embedded controller event <tspan class="ec-lmtt-10">_Qxx </tspan>just for enabling brightness keys. The conventional process to
     find these keys usually involves massive modification on DSDT and SSDTs and the debug kext is not stable on
                                                                                                  
                                                                                                  
     newer systems. Please switch to built-in brightness key discovery of <a 
href="https://github.com/acidanthera/BrightnessKeys" >BrightnessKeys</a> instead.
     </li>
     <li class="itemize">Try to avoid hacky changes like renaming <tspan class="ec-lmtt-10">_PRW </tspan>or <tspan class="ec-lmtt-10">_DSM </tspan>whenever possible.</li></ul>
<!--l. 1078--><p class="noindent" >Several cases, where patching actually does make sense, include:
</p>
     <ul class="itemize1">
     <li class="itemize">Refreshing <tspan class="ec-lmtt-10">HPET </tspan>(or another device) method header to avoid compatibility checks by <tspan class="ec-lmtt-10">_OSI </tspan>on legacy hardware.
     <tspan class="ec-lmtt-10">_STA </tspan>method  with  <tspan class="ec-lmtt-10">if ((OSFL () == Zero)) { If (HPTE) ... Return (Zero) </tspan>content  may  be  forced  to
     always return 0xF by replacing <tspan class="ec-lmtt-10">A0 10 93 4F 53 46 4C 00 </tspan>with <tspan class="ec-lmtt-10">A4 0A 0F A3 A3 A3 A3 A3</tspan>.
     </li>
     <li class="itemize">To provide custom method implementation with in an SSDT, for instance, to inject shutdown fix on certain
     computers, the original method can be replaced with a dummy name by patching <tspan class="ec-lmtt-10">_PTS </tspan>with <tspan class="ec-lmtt-10">ZPTS </tspan>and adding a
     callback to original method.</li></ul>
<!--l. 1094--><p class="noindent" >Tianocore <a 
href="https://github.com/acidanthera/audk/blob/master/MdePkg/Include/IndustryStandard/AcpiAml.h" >AcpiAml.h</a> source file may help understanding ACPI opcodes.
</p><!--l. 1097--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Patches of different <tspan class="ec-lmtt-10">Find </tspan>and <tspan class="ec-lmtt-10">Replace </tspan>lengths are unsupported as they may corrupt ACPI tables and make the system
unstable due to area relocation. If such changes are needed, the utilisation of “proxy” patching or the padding of <tspan class="ec-lmtt-10">NOP </tspan>to the
remaining area might be taken into account.
<a 
 id="x1-19025r22"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">4.6   </span> <a 
 id="x1-200006"></a>Quirks Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-20002x1"><tspan class="ec-lmtt-10">FadtEnableReset</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Provide reset register and flag in FADT table to enable reboot and shutdown.
     <!--l. 1113--><p class="noindent" >Mainly required on legacy hardware and few laptops. Can also fix power-button shortcuts. Not recommended
     unless required.
     </p></li>
     <li 
  class="enumerate" id="x1-20004x2"><tspan class="ec-lmtt-10">NormalizeHeaders</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:  Cleanup  ACPI  header  fields  to  workaround  macOS  ACPI  implementation  bug  causing  boot
     crashes. Reference: <a 
href="https://alextjam.es/debugging-appleacpiplatform/" >Debugging AppleACPIPlatform on 10.13</a> by Alex James aka theracermaster. The issue is
     fixed in macOS Mojave (10.14).
     </li>
     <li 
  class="enumerate" id="x1-20006x3"><tspan class="ec-lmtt-10">RebaseRegions</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Attempt to heuristically relocate ACPI memory regions. Not recommended.
     <!--l. 1133--><p class="noindent" >ACPI   tables   are   often   generated   dynamically   by   underlying   firmware   implementation.   Among   the
     position-independent  code,  ACPI  tables  may  contain  physical  addresses  of  MMIO  areas  used  for  device
     configuration,  usually  grouped  in  regions  (e.g.  <tspan class="ec-lmtt-10">OperationRegion</tspan>).  Changing  firmware  settings  or  hardware
     configuration, upgrading or patching the firmware inevitably leads to changes in dynamically generated ACPI
     code, which sometimes lead to the shift of the addresses in aforementioned <tspan class="ec-lmtt-10">OperationRegion </tspan>constructions.
     </p><!--l. 1143--><p class="noindent" >For this reason it is very dangerous to apply any kind of modifications to ACPI tables. The most reasonable
     approach is to make as few as possible changes to ACPI and try to not replace any tables, especially DSDT.
     When this is not possible, then at least attempt to ensure that custom DSDT is based on the most recent DSDT
     or remove writes and reads for the affected areas.
     </p><!--l. 1150--><p class="noindent" >When nothing else helps this option could be tried to avoid stalls at <tspan class="ec-lmtt-10">PCI</tspan><tspan class="ec-lmtt-10"> Configuration</tspan><tspan class="ec-lmtt-10"> Begin </tspan>phase of macOS
     booting by attempting to fix the ACPI addresses. It does not do magic, and only works with most common cases.
                                                                                                  
                                                                                                  
     Do not use unless absolutely required.
     </p></li>
     <li 
  class="enumerate" id="x1-20008x4"><tspan class="ec-lmtt-10">ResetHwSig</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reset <tspan class="ec-lmtt-10">FACS </tspan>table <tspan class="ec-lmtt-10">HardwareSignature </tspan>value to <tspan class="ec-lmtt-10">0</tspan>.
     <!--l. 1162--><p class="noindent" >This works around firmwares that fail to maintain hardware signature across the reboots and cause issues with
     waking from hibernation.
     </p></li>
     <li 
  class="enumerate" id="x1-20010x5"><tspan class="ec-lmtt-10">ResetLogoStatus</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reset <tspan class="ec-lmtt-10">BGRT </tspan>table <tspan class="ec-lmtt-10">Displayed </tspan>status field to <tspan class="ec-lmtt-10">false</tspan>.
     <!--l. 1172--><p class="noindent" >This works around firmwares that provide <tspan class="ec-lmtt-10">BGRT </tspan>table but fail to handle screen updates afterwards.
</p>
     </li></ol>
<a 
 id="x1-20011r17"></a>
<h3 class="sectionHead"><span class="titlemark">5   </span> <a 
 id="x1-210005"></a>Booter</h3>
<a 
 id="x1-21001r23"></a>
<h4 class="subsectionHead"><span class="titlemark">5.1   </span> <a 
 id="x1-220001"></a>Introduction</h4>
<!--l. 1182--><p class="noindent" >This section allows to apply different kinds of UEFI modifications on Apple bootloader (<tspan class="ec-lmtt-10">boot.efi</tspan>). The modifications
currently provide various patches and environment alterations for different firmwares. Some of these features were originally
implemented as a part of <a 
href="https://github.com/acidanthera/AptioFixPkg" >AptioMemoryFix.efi</a>, which is no longer maintained. See <a 
href="#x1-830005">Tips and Tricks</a> section for migration
steps.
</p><!--l. 1190--><p class="noindent" >If this is used for the first time on a customised firmware, there is a list of checks to do first. Prior to starting, the following
requirements should be fulfilled:
</p>
     <ul class="itemize1">
     <li class="itemize">Most up-to-date UEFI firmware (check the motherboard vendor website).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Fast Boot </tspan>and <tspan class="ec-lmtt-10">Hardware Fast Boot </tspan>disabled in firmware settings if present.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Above 4G Decoding </tspan>or similar enabled in firmware settings if present. Note, that on some motherboards (notably
     ASUS WS-X299-PRO) this option causes adverse effects, and must be disabled. While no other motherboards
     with the same issue are known, this option should be checked first whenever erratic boot failures are encountered.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">DisableIoMapper </tspan>quirk enabled, or <tspan class="ec-lmtt-10">VT-d </tspan>disabled in firmware settings if present, or ACPI DMAR table deleted.
     </li>
     <li class="itemize"><tspan class="ec-lmbx-10">No </tspan>‘slide‘ boot argument present in NVRAM or anywhere else. It is not necessary unless the system cannot be
     booted at all or <tspan class="ec-lmtt-10">No slide values are usable! Use custom slide! </tspan>message can be seen in the log.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">CFG Lock </tspan>(MSR <tspan class="ec-lmtt-10">0xE2 </tspan>write protection) disabled in firmware settings if present. Consider <a 
href="https://github.com/LongSoft/UEFITool/blob/master/UEFIPatch/patches.txt" >patching it</a> if no option
     is available (for advanced users only). See <a 
href="#x1-380008">VerifyMsrE2</a> notes for more details.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">CSM </tspan>(Compatibility Support Module) disabled in firmware settings if present. On NVIDIA 6xx/AMD 2xx or
     older, GOP ROM may have to be flashed first. Use <a 
href="https://www.win-raid.com/t892f16-AMD-and-Nvidia-GOP-update-No-requests-DIY.html" >GopUpdate</a> (see the second post) or <a 
href="http://www.insanelymac.com/forum/topic/299614-asus-eah6450-video-bios-uefi-gop-upgrade-and-gop-uefi-binary-in-efi-for-many-ati-cards/page-1#entry2042163" >AMD UEFI GOP
     MAKER</a> in case of any potential confusion.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">EHCI/XHCI Hand-off </tspan>enabled in firmware settings <tspan class="ec-lmtt-10">only </tspan>if boot stalls unless USB devices are disconnected.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">VT-x</tspan>, <tspan class="ec-lmtt-10">Hyper Threading</tspan>, <tspan class="ec-lmtt-10">Execute Disable Bit </tspan>enabled in firmware settings if present.
     </li>
                                                                                                  
                                                                                                  
     <li class="itemize">While it may not be required, sometimes <tspan class="ec-lmtt-10">Thunderbolt support</tspan>, <tspan class="ec-lmtt-10">Intel SGX</tspan>, and <tspan class="ec-lmtt-10">Intel Platform Trust </tspan>may
     have to be disabled in firmware settings present.</li></ul>
<!--l. 1228--><p class="noindent" >When debugging sleep issues Power Nap and automatic power off may be (temporarily) disabled, which appear to sometimes
cause wake to black screen or boot loop issues on older platforms. The particular issues may vary, but in general ACPI tables
should be looked up first. Here is an example of a bug found in some <a 
href="http://www.insanelymac.com/forum/topic/329624-need-cmos-reset-after-sleep-only-after-login/#entry2534645" >Z68 motherboards</a>. To turn Power Nap and the others off
run the following commands in Terminal: </p><!--l. 1234-->
<div class="lstlisting" id="listing-3"><span class="label"><a 
 id="x1-22001r1"></a></span><tspan class="ec-lmtk-10">sudo</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">pmset</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">autopoweroff</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">0</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-22002r2"></a></span><tspan class="ec-lmtk-10">sudo</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">pmset</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">powernap</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">0</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-22003r3"></a></span><tspan class="ec-lmtk-10">sudo</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">pmset</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">standby</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">0</tspan>
</div>
<!--l. 1240--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: These settings may reset at hardware change and in certain other circumstances. To view their current state use <tspan class="ec-lmtt-10">pmset</tspan>
<tspan class="ec-lmtt-10">-g </tspan>command in Terminal.
<a 
 id="x1-22004r25"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">5.2   </span> <a 
 id="x1-230002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-23002x1"><tspan class="ec-lmtt-10">MmioWhitelist</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing addresses critical for particular firmware
     functioning when <tspan class="ec-lmtt-10">DevirtualiseMmio </tspan>quirk is in use. See <a 
href="#x1-240003">MmioWhitelist Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-23004x2"><tspan class="ec-lmtt-10">Quirks</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual booter quirks described in <a 
href="#x1-250004">Quirks Properties</a> section below.
     </li></ol>
<a 
 id="x1-23005r26"></a>
<h4 class="subsectionHead"><span class="titlemark">5.3   </span> <a 
 id="x1-240003"></a>MmioWhitelist Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-24002x1"><tspan class="ec-lmtt-10">Address</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Exceptional MMIO address, which memory descriptor should be left virtualised (unchanged) by
     <tspan class="ec-lmtt-10">DevirtualiseMmio</tspan>. This means that the firmware will be able to directly communicate with this memory region
     during operating system functioning, because the region this value is in will be assigned a virtual address.
     <!--l. 1276--><p class="noindent" >The  addresses  written  here  must  be  part  of  the  memory  map,  have  <tspan class="ec-lmtt-10">EfiMemoryMappedIO </tspan>type  and
     <tspan class="ec-lmtt-10">EFI_MEMORY_RUNTIME </tspan>attribute (highest bit) set. To find the list of the candidates the debug log can be used.
     </p></li>
     <li 
  class="enumerate" id="x1-24004x2"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-24006x3"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This address will be devirtualised unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li></ol>
<a 
 id="x1-24007r27"></a>
                                                                                                  
                                                                                                  
<h4 class="subsectionHead"><span class="titlemark">5.4   </span> <a 
 id="x1-250004"></a>Quirks Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-25002x1"><tspan class="ec-lmtt-10">AvoidRuntimeDefrag</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Protect from boot.efi runtime memory defragmentation.
     <!--l. 1306--><p class="noindent" >This option fixes UEFI runtime services (date, time, NVRAM, power control, etc.) support on many firmwares
     using SMM backing for select services like variable storage. SMM may try to access physical addresses, but they
     get moved by boot.efi.
     </p><!--l. 1310--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Most but Apple and VMware firmwares need this quirk.
     </p></li>
     <li 
  class="enumerate" id="x1-25004x2"><tspan class="ec-lmtt-10">DevirtualiseMmio</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Remove runtime attribute from select MMIO regions.
     <!--l. 1318--><p class="noindent" >This option reduces stolen memory footprint from the memory map by removing runtime bit for known memory
     regions. This quirk may result in the increase of KASLR slides available, but is not necessarily compatible with
     the target board without additional measures. In general this frees from 64 to 256 megabytes of memory (present
     in the debug log), and on some platforms it is the only way to boot macOS, which otherwise fails with allocation
     error at bootloader stage.
     </p><!--l. 1326--><p class="noindent" >This option is generally useful on all firmwares except some very old ones, like Sandy Bridge. On select firmwares
     it may require a list of exceptional addresses that still need to get their virtual addresses for proper NVRAM
     and hibernation functioning. Use <tspan class="ec-lmtt-10">MmioWhitelist </tspan>section to do this.
     </p></li>
     <li 
  class="enumerate" id="x1-25006x3"><tspan class="ec-lmtt-10">DisableSingleUser</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disable single user mode.
     <!--l. 1337--><p class="noindent" >This is a security option that restricts the activation of single user mode by ignoring <tspan class="ec-lmtt-10">CMD+S </tspan>hotkey and <tspan class="ec-lmtt-10">-s </tspan>boot
     argument. The behaviour with this quirk enabled is supposed to match T2-based model behaviour. Refer to <a 
href="https://web.archive.org/web/20200517125051/https://support.apple.com/en-us/HT201573" >this
     archived article</a> to understand how to use single user mode with this quirk enabled.
     </p></li>
     <li 
  class="enumerate" id="x1-25008x4"><tspan class="ec-lmtt-10">DisableVariableWrite</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Protect from macOS NVRAM write access.
     <!--l. 1348--><p class="noindent" >This is a security option that restricts NVRAM access in macOS. This quirk requires <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME</tspan>
     protocol implemented in <tspan class="ec-lmtt-10">OpenRuntime.efi</tspan>.
     </p><!--l. 1352--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This quirk can also be used as an ugly workaround to buggy UEFI runtime services implementations that
     fail to write variables to NVRAM and break the rest of the operating system.
     </p></li>
     <li 
  class="enumerate" id="x1-25010x5"><tspan class="ec-lmtt-10">DiscardHibernateMap</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reuse original hibernate memory map.
     <!--l. 1362--><p class="noindent" >This option forces XNU kernel to ignore newly supplied memory map and assume that it did not change after
     waking from hibernation. This behaviour is required to work by Windows, which mandates to <a 
href="https://docs.microsoft.com/en-us/windows-hardware/design/device-experiences/oem-uefi#hibernation-state-s4-transition-requirements" >preserve</a> runtime
     memory size and location after S4 wake.
     </p><!--l. 1368--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This may be used to workaround buggy memory maps on older hardware, and is now considered rare
     legacy. Examples of such hardware are Ivy Bridge laptops with Insyde firmware, like Acer V3-571G. Do not use
                                                                                                  
                                                                                                  
     this unless a complete understanding of the consequences can be ensured.
     </p></li>
     <li 
  class="enumerate" id="x1-25012x6"><tspan class="ec-lmtt-10">EnableSafeModeSlide</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Patch bootloader to have KASLR enabled in safe mode.
     <!--l. 1379--><p class="noindent" >This option is relevant to the users that have issues booting to safe mode (e.g. by holding <tspan class="ec-lmtt-10">shift </tspan>or using <tspan class="ec-lmtt-10">-x</tspan>
     boot argument). By default safe mode forces <tspan class="ec-lmtt-10">0 </tspan>slide as if the system was launched with <tspan class="ec-lmtt-10">slide=0 </tspan>boot argument.
     This quirk tries to patch <tspan class="ec-lmtt-10">boot.efi </tspan>to lift that limitation and let some other value (from <tspan class="ec-lmtt-10">1 </tspan>to <tspan class="ec-lmtt-10">255</tspan>) be used. This
     quirk requires <tspan class="ec-lmtt-10">ProvideCustomSlide </tspan>to be enabled.
     </p><!--l. 1386--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by safe mode availability. If booting to safe mode fails, this option
     can be tried to be enabled.
     </p></li>
     <li 
  class="enumerate" id="x1-25014x7"><tspan class="ec-lmtt-10">EnableWriteUnprotector</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Permit write access to UEFI runtime services code.
     <!--l. 1395--><p class="noindent" >This option bypasses <tspan class="ec-lmtt-10">R</tspan><span class='accenthat'><tspan class="ec-lmtt-10">X</tspan></span> permissions in code pages of UEFI runtime services by removing write protection (<tspan class="ec-lmtt-10">WP</tspan>)
     bit from <tspan class="ec-lmtt-10">CR0 </tspan>register during their execution. This quirk requires <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol implemented
     in <tspan class="ec-lmtt-10">OpenRuntime.efi</tspan>.
     </p><!--l. 1400--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This quirk may potentially weaken firmware security, please use <tspan class="ec-lmtt-10">RebuildAppleMemoryMap </tspan>if the firmware
     supports memory attributes table (MAT). Refer to <tspan class="ec-lmtt-10">OCABC: MAT support is 1/0 </tspan>log entry to determine whether
     MAT is supported.
     </p></li>
     <li 
  class="enumerate" id="x1-25016x8"><tspan class="ec-lmtt-10">ForceExitBootServices</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Retry <tspan class="ec-lmtt-10">ExitBootServices </tspan>with new memory map on failure.
     <!--l. 1410--><p class="noindent" >Try to ensure that <tspan class="ec-lmtt-10">ExitBootServices </tspan>call succeeds even with outdated MemoryMap key argument by obtaining
     current memory map and retrying <tspan class="ec-lmtt-10">ExitBootServices </tspan>call.
     </p><!--l. 1413--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by early boot crashes of the firmware. Do not use this without a
     full understanding of the consequences.
     </p></li>
     <li 
  class="enumerate" id="x1-25018x9"><tspan class="ec-lmtt-10">ProtectMemoryRegions</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Protect memory regions from incorrect access.
     <!--l. 1422--><p class="noindent" >Some firmwares incorrectly map select memory regions:
</p>
         <ul class="itemize1">
         <li class="itemize">CSM region can be marked as boot services code or data, which leaves it as free memory for XNU kernel.
         </li>
         <li class="itemize">MMIO regions can be marked as reserved memory and stay unmapped, but may be required to be accessible
         at runtime for NVRAM support.</li></ul>
     <!--l. 1432--><p class="noindent" >This quirk attempts to fix types of these regions, e.g. ACPI NVS for CSM or MMIO for MMIO.
     </p><!--l. 1435--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by artifacts, sleep wake issues, and boot failures. In general only very old
     firmwares need this quirk.
     </p></li>
     <li 
  class="enumerate" id="x1-25020x10"><tspan class="ec-lmtt-10">ProtectSecureBoot</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Protect UEFI Secure Boot variables from being written.
     <!--l. 1445--><p class="noindent" >Reports security violation during attempts to write to <tspan class="ec-lmtt-10">db</tspan>, <tspan class="ec-lmtt-10">dbx</tspan>, <tspan class="ec-lmtt-10">PK</tspan>, and <tspan class="ec-lmtt-10">KEK </tspan>variables from the operating
     system.
     </p><!--l. 1448--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This quirk mainly attempts to avoid issues with NVRAM implementations with problematic defragmentation, such
     as select Insyde or <tspan class="ec-lmtt-10">MacPro5,1</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-25022x11"><tspan class="ec-lmtt-10">ProtectUefiServices</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Protect UEFI services from being overridden by the firmware.
     <!--l. 1457--><p class="noindent" >Some modern firmwares including both hardware and virtual machines, like VMware, may update pointers to UEFI
     services during driver loading and related actions. Consequentially this directly breaks other quirks that affect memory
     management, like <tspan class="ec-lmtt-10">DevirtualiseMmio</tspan>, <tspan class="ec-lmtt-10">ProtectMemoryRegions</tspan>, or <tspan class="ec-lmtt-10">RebuildAppleMemoryMap</tspan>, and may also break other
     quirks depending on the effects of these.
     </p><!--l. 1463--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: On VMware the need for this quirk may be diagnosed by “Your Mac OS guest might run unreliably with more
     than one virtual core.” message.
     </p></li>
     <li 
  class="enumerate" id="x1-25024x12"><tspan class="ec-lmtt-10">ProvideCustomSlide</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Provide custom KASLR slide on low memory.
     <!--l. 1472--><p class="noindent" >This option performs memory map analysis of the firmware and checks whether all slides (from <tspan class="ec-lmtt-10">1 </tspan>to <tspan class="ec-lmtt-10">255</tspan>) can be used. As
     <tspan class="ec-lmtt-10">boot.efi </tspan>generates this value randomly with <tspan class="ec-lmtt-10">rdrand </tspan>or pseudo randomly <tspan class="ec-lmtt-10">rdtsc</tspan>, there is a chance of boot failure when it
     chooses a conflicting slide. In case potential conflicts exist, this option forces macOS to use a pseudo random value among
     the available ones. This also ensures that <tspan class="ec-lmtt-10">slide= </tspan>argument is never passed to the operating system for security
     reasons.
     </p><!--l. 1480--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by <tspan class="ec-lmtt-10">OCABC: Only N/256 slide values are usable! </tspan>message in the
     debug log. If the message is present, this option is to be enabled.
     </p></li>
     <li 
  class="enumerate" id="x1-25026x13"><tspan class="ec-lmtt-10">ProvideMaxSlide</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Provide maximum KASLR slide when higher ones are unavailable.
     <!--l. 1490--><p class="noindent" >This option overrides the maximum slide of 255 by a user specified value between 1 and 254 inclusive when
     <tspan class="ec-lmtt-10">ProvideCustomSlide </tspan>is enabled. It is believed that modern firmwares allocate pool memory from top to
     bottom, effectively resulting in free memory at the time of slide scanning being later used as temporary
     memory during kernel loading. In case those memory are unavailable, this option can stop evaluating higher
     slides.
     </p><!--l. 1497--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by random boot failure when <tspan class="ec-lmtt-10">ProvideCustomSlide </tspan>is enabled and the
     randomized slide fall into the unavailable range. When <tspan class="ec-lmtt-10">AppleDebug </tspan>is enabled, usually the debug log may contain
     messages like <tspan class="ec-lmtt-10">AAPL: [EB|‘LD:LKC] } Err(0x9)</tspan>. To find the optimal value, manually append <tspan class="ec-lmtt-10">slide=X </tspan>to <tspan class="ec-lmtt-10">boot-args </tspan>and
     log the largest one that will not result in boot failures.
     </p></li>
     <li 
  class="enumerate" id="x1-25028x14"><tspan class="ec-lmtt-10">RebuildAppleMemoryMap</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Generate Memory Map compatible with macOS.
     <!--l. 1510--><p class="noindent" >Apple kernel has several limitations in parsing UEFI memory map:
</p>
                                                                                                  
                                                                                                  
         <ul class="itemize1">
         <li class="itemize">Memory map size must not exceed 4096 bytes as Apple kernel maps it as a single 4K page. Since some
         firmwares have very large memory maps (approximately over 100 entries) Apple kernel will crash at boot.
         </li>
         <li class="itemize">Memory attributes table is ignored. <tspan class="ec-lmtt-10">EfiRuntimeServicesCode </tspan>memory statically gets <tspan class="ec-lmtt-10">RX </tspan>permissions, and
         all other memory types get <tspan class="ec-lmtt-10">RW </tspan>permissions. Since some firmware drivers may write to global variables
         at  runtime,  Apple  kernel  will  crash  at  calling  UEFI  runtime  services,  unless  driver  <tspan class="ec-lmtt-10">.data </tspan>section  has
         <tspan class="ec-lmtt-10">EfiRuntimeServicesData </tspan>type.</li></ul>
     <!--l. 1525--><p class="noindent" >To workaround these limitations this quirk applies memory attributes table permissions to memory map passed to Apple
     kernel and optionally attempts to unify contiguous slots of similar types if the resulting memory map exceeds 4
     KB.
     </p><!--l. 1530--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: Since many firmwares come with incorrect memory protection table this quirk often comes in pair with
     <tspan class="ec-lmtt-10">SyncRuntimePermissions</tspan>.
     </p><!--l. 1533--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: The necessity of this quirk is determined by early boot failures. This quirk replaces <tspan class="ec-lmtt-10">EnableWriteUnprotector </tspan>on
     firmwares supporting memory attributes table (MAT). This quirk is generally unnecessary when using <tspan class="ec-lmtt-10">OpenDuetPkg</tspan>, but
     may be required to boot macOS 10.6 and earlier for unclear reasons.
     </p></li>
     <li 
  class="enumerate" id="x1-25030x15"><tspan class="ec-lmtt-10">SetupVirtualMap</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Setup virtual memory at <tspan class="ec-lmtt-10">SetVirtualAddresses</tspan>.
     <!--l. 1545--><p class="noindent" >Select firmwares access memory by virtual addresses after <tspan class="ec-lmtt-10">SetVirtualAddresses </tspan>call, which results in early boot crashes.
     This quirk workarounds the problem by performing early boot identity mapping of assigned virtual addresses to physical
     memory.
     </p><!--l. 1550--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by early boot failures. Currently new firmwares with memory protection
     support (like OVMF) do not support this quirk due to <a 
href="https://github.com/acidanthera/bugtracker/issues/719" >acidanthera/bugtracker#719</a>.
     </p></li>
     <li 
  class="enumerate" id="x1-25032x16"><tspan class="ec-lmtt-10">SignalAppleOS</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Report macOS being loaded through OS Info for any OS.
     <!--l. 1560--><p class="noindent" >This quirk is useful on Mac firmwares, which behave differently in different OS. For example, it is supposed to enable
     Intel GPU in Windows and Linux in some dual-GPU MacBook models.
     </p></li>
     <li 
  class="enumerate" id="x1-25034x17"><tspan class="ec-lmtt-10">SyncRuntimePermissions</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update memory permissions for runtime environment.
     <!--l. 1570--><p class="noindent" >Some firmwares either fail to properly handle runtime permissions: </p>
         <ul class="itemize1">
         <li class="itemize">They incorrectly mark <tspan class="ec-lmtt-10">OpenRuntime </tspan>as not executable in the memory map.
         </li>
         <li class="itemize">They incorrectly mark <tspan class="ec-lmtt-10">OpenRuntime </tspan>as not executable in the memory attributes table.
         </li>
         <li class="itemize">They lose entries from the memory attributes table after <tspan class="ec-lmtt-10">OpenRuntime </tspan>is loaded.
         </li>
         <li class="itemize">They mark items in the memory attributes table as read-write-execute.</li></ul>
     <!--l. 1581--><p class="noindent" >This quirk tries to update memory map and memory attributes table to correct this.
     </p><!--l. 1583--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The necessity of this quirk is determined by early boot failures either in macOS or in Linux/Windows. In general
     only firmwares released in 2018 or later are affected.
</p>
                                                                                                  
                                                                                                  
     </li></ol>
<a 
 id="x1-25035r24"></a>
<h3 class="sectionHead"><span class="titlemark">6   </span> <a 
 id="x1-260006"></a>DeviceProperties</h3>
<a 
 id="x1-26001r28"></a>
<h4 class="subsectionHead"><span class="titlemark">6.1   </span> <a 
 id="x1-270001"></a>Introduction</h4>
<!--l. 1592--><p class="noindent" >Device configuration is provided to macOS with a dedicated buffer, called <tspan class="ec-lmtt-10">EfiDevicePathPropertyDatabase</tspan>. This buffer is a
serialised map of DevicePaths to a map of property names and their values.
</p><!--l. 1596--><p class="noindent" >Property data can be debugged with <a 
href="https://github.com/acidanthera/gfxutil" >gfxutil</a>. To obtain current property data use the following command in macOS:
</p><!--l. 1599-->
<div class="lstlisting" id="listing-4"><span class="label"><a 
 id="x1-27001r1"></a></span><tspan class="ec-lmtk-10">ioreg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">lw0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">IODeviceTree</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">n</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">e</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">r</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">x</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">grep</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">device</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">properties</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-27002r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">sed</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">s</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">&#x003C;//;</tspan><tspan class="ec-lmtt-10">s</tspan><tspan class="ec-lmtt-10">/&#x003E;.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">//</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x003E;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">device</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">properties</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">hex</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0026;&#x0026;</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-27003r3"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">gfxutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">device</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">properties</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">hex</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">device</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">properties</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0026;&#x0026;</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-27004r4"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">cat</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">device</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">properties</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">plist</tspan>
</div>
<!--l. 1606--><p class="noindent" >Device properties are part of the <tspan class="ec-lmtt-10">IODeviceTree </tspan>(<tspan class="ec-lmtt-10">gIODT</tspan>) plane of macOS I/O Registry. This plane has several construction
stages relevant for the platform initialisation. While the early construction stage is performed by the XNU kernel in the
<tspan class="ec-lmtt-10">IODeviceTreeAlloc </tspan>method, the majority of the construction is performed by the platform expert, implemented in
<tspan class="ec-lmtt-10">AppleACPIPlatformExpert.kext</tspan>.
</p><!--l. 1613--><p class="noindent" >AppleACPIPlatformExpert incorporates two stages of <tspan class="ec-lmtt-10">IODeviceTree </tspan>construction implemented by calling <br 
class="newline" /><tspan class="ec-lmtt-10">AppleACPIPlatformExpert::mergeDeviceProperties</tspan>:
     </p><ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-27006x1">During ACPI table initialisation through the recursive ACPI namespace scanning by the calls to <br 
class="newline" /><tspan class="ec-lmtt-10">AppleACPIPlatformExpert::createDTNubs</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-27008x2">During IOService registration (<tspan class="ec-lmtt-10">IOServices::registerService</tspan>) callbacks implemented as a part of <br 
class="newline" /><tspan class="ec-lmtt-10">AppleACPIPlatformExpert::platformAdjustService </tspan>function and its private worker method <br 
class="newline" /><tspan class="ec-lmtt-10">AppleACPIPlatformExpert::platformAdjustPCIDevice </tspan>specific to the PCI devices.</li></ol>
<!--l. 1630--><p class="noindent" >The application of the stages depends on the device presence in ACPI tables. The first stage applies very early but exclusively
to the devices present in ACPI tables. The second stage applies to all devices much later after the PCI configuration and may
repeat the first stage if the device was not present in ACPI.
</p><!--l. 1635--><p class="noindent" >For all kernel drivers, which may inspect the <tspan class="ec-lmtt-10">IODeviceTree </tspan>plane without probing (e.g. <tspan class="ec-lmtt-10">Lilu </tspan>and its plugins like
<tspan class="ec-lmtt-10">WhateverGreen</tspan>) it is particularly important to ensure device presence in the ACPI tables. Failing to do so may result <tspan class="ec-lmbx-10">in all</tspan>
<tspan class="ec-lmbx-10">kinds of erratic behaviour </tspan>caused by ignoring the injected device properties as they were not constructed at the first stage.
See <tspan class="ec-lmtt-10">SSDT-IMEI.dsl </tspan>and <tspan class="ec-lmtt-10">SSDT-BRG0.dsl </tspan>for an example.
<a 
 id="x1-27009r30"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">6.2   </span> <a 
 id="x1-280002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-28002x1"><tspan class="ec-lmtt-10">Add</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets device properties from a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of device paths to a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of variable
     names and their values in <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> metadata </tspan>format. Device paths must be provided in canonic string format (e.g.
     <tspan class="ec-lmtt-10">PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)</tspan>). Properties will only be set if not present and not deleted.
     <!--l. 1654--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Currently properties may only be (formerly) added by the original driver, so unless a separate driver was
     installed, there is no reason to delete the variables.
     </p></li>
     <li 
  class="enumerate" id="x1-28004x2"><tspan class="ec-lmtt-10">Delete</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Removes device properties from a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of device paths to an array (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan>)
     of variable names in <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string </tspan>format.
                                                                                                  
                                                                                                  
     </li></ol>
<a 
 id="x1-28005r31"></a>
<h4 class="subsectionHead"><span class="titlemark">6.3   </span> <a 
 id="x1-290003"></a>Common Properties</h4>
<!--l. 1668--><p class="noindent" >Some known properties include:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">device-id</tspan>
     User-specified device identifier used for I/O Kit matching. Has 4 byte data type.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">vendor-id</tspan>
     User-specified vendor identifier used for I/O Kit matching. Has 4 byte data type.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AAPL,ig-platform-id</tspan>
     Intel GPU framebuffer identifier used for framebuffer selection on Ivy Bridge and newer. Has 4 byte data type.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AAPL,snb-platform-id</tspan>
     Intel GPU framebuffer identifier used for framebuffer selection on Sandy Bridge. Has 4 byte data type.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">layout-id</tspan>
     Audio layout used for AppleHDA layout selection. Has 4 byte data type.</li></ul>
<a 
 id="x1-29001r29"></a>
<h3 class="sectionHead"><span class="titlemark">7   </span> <a 
 id="x1-300007"></a>Kernel</h3>
<a 
 id="x1-30001r32"></a>
<h4 class="subsectionHead"><span class="titlemark">7.1   </span> <a 
 id="x1-310001"></a>Introduction</h4>
<!--l. 1701--><p class="noindent" >This section allows to apply different kinds of kernelspace modifications on Apple Kernel (<a 
href="https://opensource.apple.com/source/xnu" >XNU</a>). The modifications currently
provide driver (kext) injection, kernel and driver patching, and driver blocking.
<a 
 id="x1-31001r34"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">7.2   </span> <a 
 id="x1-320002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-32002x1"><tspan class="ec-lmtt-10">Add</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load selected kernel drivers from <tspan class="ec-lmtt-10">OC/Kexts </tspan>directory.
     <!--l. 1715--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each driver. See <a 
href="#x1-330003">Add Properties</a> section below. Kernel
     driver load order follows the item order in the array, thus the dependencies should be written prior to their
     consumers.
     </p><!--l. 1720--><p class="noindent" >To track the dependency order, inspect the <tspan class="ec-lmtt-10">OSBundleLibraries </tspan>key in the <tspan class="ec-lmtt-10">Info.plist </tspan>of the kext. Any kext
     mentioned in the <tspan class="ec-lmtt-10">OSBundleLibraries </tspan>of the other kext must precede this kext.
     </p><!--l. 1724--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Kexts may have inner kexts (<tspan class="ec-lmtt-10">Plug-Ins</tspan>) in their bundle. Each inner kext must be added separately.
     </p></li>
     <li 
  class="enumerate" id="x1-32004x2"><tspan class="ec-lmtt-10">Block</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Remove selected kernel drivers from prelinked kernel.
     <!--l. 1733--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary </tspan>values, describing each blocked driver. See <a 
href="#x1-340004">Block Properties</a> section
     below.
     </p></li>
     <li 
  class="enumerate" id="x1-32006x3"><tspan class="ec-lmtt-10">Emulate</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Emulate select hardware in kernelspace via parameters described in <a 
href="#x1-350005">Emulate Properties</a> section
     below.
     </li>
     <li 
  class="enumerate" id="x1-32008x4"><tspan class="ec-lmtt-10">Force</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load kernel drivers from system volume if they are not cached.
     <!--l. 1748--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each driver. See <a 
href="#x1-360006">Force Properties</a> section below. This
     section resolves the problem of injecting drivers that depend on other drivers, which are not cached otherwise.
     The issue normally affects older operating systems, where various dependency kexts, like <tspan class="ec-lmtt-10">IOAudioFamily </tspan>or
     <tspan class="ec-lmtt-10">IONetworkingFamily </tspan>may not be present in the kernel cache by default. Kernel driver load order follows the
     item order in the array, thus the dependencies should be written prior to their consumers. <tspan class="ec-lmtt-10">Force </tspan>happens before
     <tspan class="ec-lmtt-10">Add</tspan>.
     </p><!--l. 1758--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The signature of the “forced” kernel drivers is not checked anyhow, making the use of this feature extremely
     dangerous and undesired for secure boot. This feature may not work on encrypted partitions in newer operating
     systems.
     </p></li>
     <li 
  class="enumerate" id="x1-32010x5"><tspan class="ec-lmtt-10">Patch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Perform binary patches in kernel and drivers prior to driver addition and removal.
     <!--l. 1769--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary </tspan>values, describing each patch. See <a 
href="#x1-370007">Patch Properties</a> section below.
     </p></li>
     <li 
  class="enumerate" id="x1-32012x6"><tspan class="ec-lmtt-10">Quirks</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual kernel and driver quirks described in <a 
href="#x1-380008">Quirks Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-32014x7"><tspan class="ec-lmtt-10">Scheme</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Define kernelspace operation mode via parameters described in <a 
href="#x1-390009">Scheme Properties</a> section below.
     </li></ol>
<a 
 id="x1-32015r35"></a>
<h4 class="subsectionHead"><span class="titlemark">7.3   </span> <a 
 id="x1-330003"></a>Add Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-33002x1"><tspan class="ec-lmtt-10">Arch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Any</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext architecture (<tspan class="ec-lmtt-10">Any</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">x86_64</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-33004x2"><tspan class="ec-lmtt-10">BundlePath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext bundle path (e.g. <tspan class="ec-lmtt-10">Lilu.kext </tspan>or <tspan class="ec-lmtt-10">MyKext.kext/Contents/PlugIns/MySubKext.kext</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-33006x3"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-33008x4"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This kernel driver will not be added unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-33010x5"><tspan class="ec-lmtt-10">ExecutablePath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext executable path relative to bundle (e.g. <tspan class="ec-lmtt-10">Contents/MacOS/Lilu</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-33012x6"><tspan class="ec-lmtt-10">MaxKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Adds kernel driver on specified macOS version or older.
     <!--l. 1831--><p class="noindent" ><a 
 id="kernmatch"></a>Kernel version can be obtained with <tspan class="ec-lmtt-10">uname -r </tspan>command, and should look like 3 numbers separated by dots,
     for example <tspan class="ec-lmtt-10">18.7.0 </tspan>is the kernel version for <tspan class="ec-lmtt-10">10.14.6</tspan>. Kernel version interpretation is implemented as
     follows:
     </p><table 
class="align-star">
           <tr><td 
class="align-odd"><tspan class="lmmi-10">ParseDarwinV ersion</tspan><tspan class="rm-lmr-10">(</tspan><tspan class="lmmi-10">κ,λ,μ</tspan><tspan class="rm-lmr-10">)</tspan> <tspan class="rm-lmr-10">= </tspan><tspan class="lmmi-10">κ </tspan><tspan class="lmsy-10">⋅ </tspan><tspan class="rm-lmr-10">10000</tspan>Where <tspan class="lmmi-10">κ </tspan><tspan class="lmsy-10">∈ </tspan><tspan class="rm-lmr-10">(0</tspan><tspan class="lmmi-10">,</tspan><tspan class="rm-lmr-10">99)</tspan> is kernel version major
                                         <tspan class="rm-lmr-10">+ </tspan><tspan class="lmmi-10">λ </tspan><tspan class="lmsy-10">⋅ </tspan><tspan class="rm-lmr-10">100</tspan>   Where <tspan class="lmmi-10">λ </tspan><tspan class="lmsy-10">∈ </tspan><tspan class="rm-lmr-10">(0</tspan><tspan class="lmmi-10">,</tspan><tspan class="rm-lmr-10">99)</tspan> is kernel version minor
                                         <tspan class="rm-lmr-10">+ </tspan><tspan class="lmmi-10">μ</tspan>        Where <tspan class="lmmi-10">μ </tspan><tspan class="lmsy-10">∈ </tspan><tspan class="rm-lmr-10">(0</tspan><tspan class="lmmi-10">,</tspan><tspan class="rm-lmr-10">99)</tspan> is kernel version patch </td><td 
class="align-even"></td>           <td 
class="align-label">       </td></tr></table>
     <!--l. 1844--><p class="noindent" >Kernel version comparison is implemented as follows:
                                                                                                  
                                                                                                  
     </p><table 
class="align-star">
   <tr><td 
class="align-odd"><tspan class="lmmi-10">α</tspan></td>   <td 
class="align-even"> <tspan class="rm-lmr-10">= </tspan><img 
src="Configuration0x.png" alt="{
 P arseDarwinV  ersion(MinKernel),               If MinKernel is valid
 0                                            Otherwise"  class="left" align="middle" /></td>            <td 
class="align-label"></td>   <td 
class="align-label">
   </td></tr><tr><td 
class="align-odd"><tspan class="lmmi-10">β</tspan></td>   <td 
class="align-even"> <tspan class="rm-lmr-10">= </tspan><img 
src="Configuration1x.png" alt="{
 P arseDarwinV  ersion(MaxKernel),               If MaxKernel is valid

 ∞                                            Otherwise"  class="left" align="middle" /></td>            <td 
class="align-label"></td>   <td 
class="align-label">
   </td></tr><tr><td 
class="align-odd"><tspan class="lmmi-10">γ</tspan></td>   <td 
class="align-even"> <tspan class="rm-lmr-10">= </tspan><img 
src="Configuration2x.png" alt="{
 P arseDarwinV  ersion(FindDarwinV ersion()),    If valid &#x0022;Darwin Kernel Version&#x0022; is found
 ∞                                            Otherwise"  class="left" align="middle" /></td>   <td 
class="align-label"></td>   <td 
class="align-label">
   </td></tr><tr><td 
class="align-odd"></td>    <td 
class="align-even"><tspan class="lmmi-10"> </tspan><tspan class="lmmi-10"> </tspan><tspan class="lmmi-10"> </tspan><tspan class="lmmi-10"> </tspan><tspan class="lmmi-10">                                     f</tspan><tspan class="rm-lmr-10">(</tspan><tspan class="lmmi-10">α,β,γ</tspan><tspan class="rm-lmr-10">) = </tspan><tspan class="lmmi-10">α </tspan><tspan class="lmsy-10">≤ </tspan><tspan class="lmmi-10">γ </tspan><tspan class="lmsy-10">≤ </tspan><tspan class="lmmi-10">β</tspan></td>                                      <td 
class="align-label"></td>   <td 
class="align-label"></td></tr></table>
     <!--l. 1863--><p class="noindent" >Here <tspan class="lmmi-10">ParseDarwinV ersion </tspan>argument is assumed to be 3 integers obtained by splitting Darwin kernel version string from
     left to right by the <tspan class="ec-lmtt-10">. </tspan>symbol. <tspan class="lmmi-10">FindDarwinV ersion </tspan>function looks up Darwin kernel version by locating <tspan class="ec-lmtt-10">&#x0022;Darwin Kernel</tspan>
     <tspan class="ec-lmtt-10">Version </tspan><tspan class="lmmi-10">κ</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="lmmi-10">λ</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="lmmi-10">μ</tspan><tspan class="ec-lmtt-10">&#x0022; </tspan>string in the kernel image.
     </p></li>
     <li 
  class="enumerate" id="x1-33014x7"><tspan class="ec-lmtt-10">MinKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Adds kernel driver on specified macOS version or newer.
     <!--l. 1874--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-33016x8"><tspan class="ec-lmtt-10">PlistPath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext <tspan class="ec-lmtt-10">Info.plist </tspan>path relative to bundle (e.g. <tspan class="ec-lmtt-10">Contents/Info.plist</tspan>).
     </li></ol>
<a 
 id="x1-33017r36"></a>
<h4 class="subsectionHead"><span class="titlemark">7.4   </span> <a 
 id="x1-340004"></a>Block Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-34002x1"><tspan class="ec-lmtt-10">Arch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Any</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext block architecture (<tspan class="ec-lmtt-10">Any</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">x86_64</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-34004x2"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-34006x3"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This kernel driver will not be blocked unless set to <tspan class="ec-lmtt-10">true</tspan>.
                                                                                                  
                                                                                                  
     </li>
     <li 
  class="enumerate" id="x1-34008x4"><tspan class="ec-lmtt-10">Identifier</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext bundle identifier (e.g. <tspan class="ec-lmtt-10">com.apple.driver.AppleTyMCEDriver</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-34010x5"><tspan class="ec-lmtt-10">MaxKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Blocks kernel driver on specified macOS version or older.
     <!--l. 1922--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-34012x6"><tspan class="ec-lmtt-10">MinKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Blocks kernel driver on specified macOS version or newer.
     <!--l. 1930--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
</p>
     </li></ol>
<a 
 id="x1-34013r37"></a>
<h4 class="subsectionHead"><span class="titlemark">7.5   </span> <a 
 id="x1-350005"></a>Emulate Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-35002x1"><tspan class="ec-lmtt-10">Cpuid1Data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 16 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sequence of <tspan class="ec-lmtt-10">EAX</tspan>, <tspan class="ec-lmtt-10">EBX</tspan>, <tspan class="ec-lmtt-10">ECX</tspan>, <tspan class="ec-lmtt-10">EDX </tspan>values to replace <tspan class="ec-lmtt-10">CPUID (1) </tspan>call in XNU kernel.
     <!--l. 1944--><p class="noindent" >This property primarily serves for three needs:
</p>
         <ul class="itemize1">
         <li class="itemize">Enabling support of an unsupported CPU model (e.g. Intel Pentium).
         </li>
         <li class="itemize">Enabling support of a CPU model that is not yet supported by a specific version of macOS which usually
         is old.
         </li>
         <li class="itemize">Enabling XCPM support for an unsupported CPU variant.</li></ul>
     <!--l. 1953--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: It may also be the case that the CPU model is supported but there is no power management supported (e.g.
     virtual machines). In this case, <tspan class="ec-lmtt-10">MinKernel </tspan>and <tspan class="ec-lmtt-10">MaxKernel </tspan>can be set to restrict CPU virtualisation and dummy power
     management patches to the particular macOS kernel version.
     </p><!--l. 1957--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: Normally it is only the value of <tspan class="ec-lmtt-10">EAX </tspan>that needs to be taken care of, since it represents the full CPUID. The
     remaining bytes are to be left as zeroes. Byte order is Little Endian, so for example, <tspan class="ec-lmtt-10">C3 06 03 00 </tspan>stands for CPUID
     <tspan class="ec-lmtt-10">0x0306C3 </tspan>(Haswell).
     </p><!--l. 1962--><p class="noindent" ><tspan class="ec-lmri-10">Note 3</tspan>: For XCPM support it is recommended to use the following combinations.
</p>
         <ul class="itemize1">
         <li class="itemize">Haswell-E (<tspan class="ec-lmtt-10">0x0306F2</tspan>) to Haswell (<tspan class="ec-lmtt-10">0x0306C3</tspan>):<br 
class="newline" /><tspan class="ec-lmtt-10">Cpuid1Data</tspan>: <tspan class="ec-lmtt-10">C3 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">Cpuid1Mask</tspan>: <tspan class="ec-lmtt-10">FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00</tspan>
         </li>
         <li class="itemize">Broadwell-E (<tspan class="ec-lmtt-10">0x0406F1</tspan>) to Broadwell (<tspan class="ec-lmtt-10">0x0306D4</tspan>):<br 
class="newline" /><tspan class="ec-lmtt-10">Cpuid1Data</tspan>: <tspan class="ec-lmtt-10">D4 06 03 00 00 00 00 00 00 00 00 00 00 00 00 00</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">Cpuid1Mask</tspan>: <tspan class="ec-lmtt-10">FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00</tspan></li></ul>
                                                                                                  
                                                                                                  
     <!--l. 1974--><p class="noindent" ><tspan class="ec-lmri-10">Note 4</tspan>: Note that the following configurations are unsupported by XCPM (at least out of the box):
</p>
         <ul class="itemize1">
         <li class="itemize">Consumer Ivy Bridge (<tspan class="ec-lmtt-10">0x0306A9</tspan>) as Apple disabled XCPM for Ivy Bridge and recommends legacy power
         management for these CPUs. <tspan class="ec-lmtt-10">_xcpm_bootstrap </tspan>should manually be patched to enforce XCPM on these
         CPUs instead of this option.
         </li>
         <li class="itemize">Low-end CPUs (e.g. Haswell+ Pentium) as they are not supported properly by macOS. Legacy hacks for
         older models can be found in the <tspan class="ec-lmtt-10">Special NOTES </tspan>section of <a 
href="https://github.com/acidanthera/bugtracker/issues/365" >acidanthera/bugtracker#365</a>.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-35004x2"><tspan class="ec-lmtt-10">Cpuid1Mask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 16 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Bit mask of active bits in <tspan class="ec-lmtt-10">Cpuid1Data</tspan>.
     <!--l. 1992--><p class="noindent" >When each <tspan class="ec-lmtt-10">Cpuid1Mask </tspan>bit is set to 0, the original CPU bit is used, otherwise set bits take the value of
     <tspan class="ec-lmtt-10">Cpuid1Data</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-35006x3"><tspan class="ec-lmtt-10">DummyPowerManagement</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables <tspan class="ec-lmtt-10">AppleIntelCpuPowerManagement</tspan>.
     <!--l. 2002--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: This option is a preferred alternative to <tspan class="ec-lmtt-10">NullCpuPowerManagement.kext </tspan>for CPUs without native power
     management driver in macOS.
     </p><!--l. 2006--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: While this option is usually needed to disable <tspan class="ec-lmtt-10">AppleIntelCpuPowerManagement </tspan>on unsupported platforms, it can
     also be used to disable this kext in other situations (e.g. with <tspan class="ec-lmtt-10">Cpuid1Data </tspan>left blank).
     </p></li>
     <li 
  class="enumerate" id="x1-35008x4"><tspan class="ec-lmtt-10">MaxKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Emulates CPUID and applies <tspan class="ec-lmtt-10">DummyPowerManagement </tspan>on specified macOS version or older.
     <!--l. 2016--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-35010x5"><tspan class="ec-lmtt-10">MinKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Emulates CPUID and applies <tspan class="ec-lmtt-10">DummyPowerManagement </tspan>on specified macOS version or newer.
     <!--l. 2024--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
</p>
     </li></ol>
<a 
 id="x1-35011r38"></a>
<h4 class="subsectionHead"><span class="titlemark">7.6   </span> <a 
 id="x1-360006"></a>Force Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-36002x1"><tspan class="ec-lmtt-10">Arch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Any</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext architecture (<tspan class="ec-lmtt-10">Any</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">x86_64</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-36004x2"><tspan class="ec-lmtt-10">BundlePath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext bundle path (e.g. <tspan class="ec-lmtt-10">System\Library \Extensions \IONetworkingFamily.kext</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-36006x3"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-36008x4"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This kernel driver will not be added when not present unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-36010x5"><tspan class="ec-lmtt-10">ExecutablePath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext executable path relative to bundle (e.g. <tspan class="ec-lmtt-10">Contents/MacOS/IONetworkingFamily</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-36012x6"><tspan class="ec-lmtt-10">Identifier</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:       Kext       identifier       to       perform       presence       checking       before       adding
     (e.g. <tspan class="ec-lmtt-10">com.apple.iokit.IONetworkingFamily</tspan>). Only drivers which identifiers are not be found in the cache will
     be added.
     </li>
     <li 
  class="enumerate" id="x1-36014x7"><tspan class="ec-lmtt-10">MaxKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Adds kernel driver on specified macOS version or older.
     <!--l. 2080--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-36016x8"><tspan class="ec-lmtt-10">MinKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Adds kernel driver on specified macOS version or newer.
     <!--l. 2088--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-36018x9"><tspan class="ec-lmtt-10">PlistPath</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext <tspan class="ec-lmtt-10">Info.plist </tspan>path relative to bundle (e.g. <tspan class="ec-lmtt-10">Contents/Info.plist</tspan>).
     </li></ol>
<a 
 id="x1-36019r39"></a>
<h4 class="subsectionHead"><span class="titlemark">7.7   </span> <a 
 id="x1-370007"></a>Patch Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-37002x1"><tspan class="ec-lmtt-10">Arch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Any</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext patch architecture (<tspan class="ec-lmtt-10">Any</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">x86_64</tspan>).
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-37004x2"><tspan class="ec-lmtt-10">Base</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Selects symbol-matched base for patch lookup (or immediate replacement) by obtaining the address
     of provided symbol name. Can be set to empty string to be ignored.
     </li>
     <li 
  class="enumerate" id="x1-37006x3"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-37008x4"><tspan class="ec-lmtt-10">Count</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Number of patch occurrences to apply. <tspan class="ec-lmtt-10">0 </tspan>applies the patch to all occurrences found.
     </li>
     <li 
  class="enumerate" id="x1-37010x5"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This kernel patch will not be used unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-37012x6"><tspan class="ec-lmtt-10">Find</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data to find. Can be set to empty for immediate replacement at <tspan class="ec-lmtt-10">Base</tspan>. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in
     size otherwise.
     </li>
     <li 
  class="enumerate" id="x1-37014x7"><tspan class="ec-lmtt-10">Identifier</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Kext bundle identifier (e.g. <tspan class="ec-lmtt-10">com.apple.driver.AppleHDA</tspan>) or <tspan class="ec-lmtt-10">kernel </tspan>for kernel patch.
     </li>
     <li 
  class="enumerate" id="x1-37016x8"><tspan class="ec-lmtt-10">Limit</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Maximum number of bytes to search for. Can be set to <tspan class="ec-lmtt-10">0 </tspan>to look through the whole kext or kernel.
     </li>
     <li 
  class="enumerate" id="x1-37018x9"><tspan class="ec-lmtt-10">Mask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data bitwise mask used during find comparison. Allows fuzzy search by ignoring not masked (set
     to zero) bits. Can be set to empty data to be ignored. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in size otherwise.
     </li>
     <li 
  class="enumerate" id="x1-37020x10"><tspan class="ec-lmtt-10">MaxKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Patches data on specified macOS version or older.
     <!--l. 2176--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-37022x11"><tspan class="ec-lmtt-10">MinKernel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Patches data on specified macOS version or newer.
     <!--l. 2184--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Refer to <a 
href="#kernmatch"><tspan class="ec-lmtt-10">Add MaxKernel </tspan>description</a> for matching logic.
     </p></li>
     <li 
  class="enumerate" id="x1-37024x12"><tspan class="ec-lmtt-10">Replace</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Replacement data of one or more bytes.
     </li>
     <li 
  class="enumerate" id="x1-37026x13"><tspan class="ec-lmtt-10">ReplaceMask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty data<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Data bitwise mask used during replacement. Allows fuzzy replacement by updating masked (set
     to non-zero) bits. Can be set to empty data to be ignored. Must equal to <tspan class="ec-lmtt-10">Replace </tspan>in size otherwise.
     </li>
     <li 
  class="enumerate" id="x1-37028x14"><tspan class="ec-lmtt-10">Skip</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Number of found occurrences to be skipped before replacement is done.
     </li></ol>
<a 
 id="x1-37029r40"></a>
<h4 class="subsectionHead"><span class="titlemark">7.8   </span> <a 
 id="x1-380008"></a>Quirks Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-38002x1"><tspan class="ec-lmtt-10">AppleCpuPmCfgLock</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:                 Disables                 <tspan class="ec-lmtt-10">PKG_CST_CONFIG_CONTROL           </tspan>(<tspan class="ec-lmtt-10">0xE2</tspan>)                 MSR
     modification in AppleIntelCPUPowerManagement.kext, commonly causing early kernel panic, when it is locked
     from writing.
     <!--l. 2223--><p class="noindent" >Certain firmwares lock <tspan class="ec-lmtt-10">PKG_CST_CONFIG_CONTROL </tspan>MSR register. The bundled <tspan class="ec-lmtt-10">VerifyMsrE2 </tspan>tool can be used to
     check its state. Some firmware have this register locked only on some cores.
     </p><!--l. 2227--><p class="noindent" >As modern firmwares provide <tspan class="ec-lmtt-10">CFG Lock </tspan>setting, which allows configuring <tspan class="ec-lmtt-10">PKG_CST_CONFIG_CONTROL </tspan>MSR register
     lock, this option should be avoided whenever possible. For several APTIO firmwares not displaying <tspan class="ec-lmtt-10">CFG Lock</tspan>
     setting in the GUI it is possible to access the option directly:
         </p><ol  class="enumerate2" >
         <li 
  class="enumerate" id="x1-38004x1">Download <a 
href="https://github.com/LongSoft/UEFITool/releases" >UEFITool</a> and <a 
href="https://github.com/LongSoft/Universal-IFR-Extractor/releases" >IFR-Extractor</a>.
         </li>
         <li 
  class="enumerate" id="x1-38006x2">Open the firmware image in UEFITool and find <tspan class="ec-lmtt-10">CFG Lock </tspan>unicode string. If it is not present, the firmware
         may not have this option and the process should therefore be discontinued.
         </li>
         <li 
  class="enumerate" id="x1-38008x3">Extract the <tspan class="ec-lmtt-10">Setup.bin </tspan>PE32 Image Section (the UEFITool found) through the <tspan class="ec-lmtt-10">Extract Body </tspan>menu option.
         </li>
         <li 
  class="enumerate" id="x1-38010x4">Run IFR-Extractor on the extracted file (e.g. <tspan class="ec-lmtt-10">./ifrextract Setup.bin Setup.txt</tspan>).
         </li>
         <li 
  class="enumerate" id="x1-38012x5">Find <tspan class="ec-lmtt-10">CFG Lock, VarStoreInfo (VarOffset/VarName): </tspan>in <tspan class="ec-lmtt-10">Setup.txt </tspan>and remember the offset right after
         it (e.g. <tspan class="ec-lmtt-10">0x123</tspan>).
         </li>
         <li 
  class="enumerate" id="x1-38014x6">Download and run <a 
href="http://brains.by/posts/bootx64.7z" >Modified GRUB Shell</a> compiled by <a 
href="https://geektimes.com/post/258090" >brainsucker</a> or use <a 
href="https://github.com/datasone/grub-mod-setup_var" >a newer version</a> by <a 
href="https://github.com/datasone" >datasone</a>.
         </li>
         <li 
  class="enumerate" id="x1-38016x7">Enter <tspan class="ec-lmtt-10">setup_var 0x123 0x00 </tspan>command, where <tspan class="ec-lmtt-10">0x123 </tspan>should be replaced by the actual offset, and reboot.</li></ol>
     <!--l. 2251--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: Variable offsets are unique not only to each motherboard but even to its firmware version. Never ever try to
                                                                                                  
                                                                                                  
     use an offset without checking.
     </p></li>
     <li 
  class="enumerate" id="x1-38018x2"><tspan class="ec-lmtt-10">AppleXcpmCfgLock</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.8 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables <tspan class="ec-lmtt-10">PKG_CST_CONFIG_CONTROL </tspan>(<tspan class="ec-lmtt-10">0xE2</tspan>) MSR modification in XNU kernel, commonly causing early
     kernel panic, when it is locked from writing (XCPM power management).
     <!--l. 2263--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option should be avoided whenever possible. See <tspan class="ec-lmtt-10">AppleCpuPmCfgLock </tspan>description for more
     details.
     </p></li>
     <li 
  class="enumerate" id="x1-38020x3"><tspan class="ec-lmtt-10">AppleXcpmExtraMsrs</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.8 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables multiple MSR access critical for select CPUs, which have no native XCPM support.
     <!--l. 2274--><p class="noindent" >This is normally used in conjunction with <tspan class="ec-lmtt-10">Emulate </tspan>section on Haswell-E, Broadwell-E, Skylake-SP, and similar CPUs.
     More details on the XCPM patches are outlined in <a 
href="https://github.com/acidanthera/bugtracker/issues/365" >acidanthera/bugtracker#365</a>.
     </p><!--l. 2278--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Additional not provided patches will be required for Ivy Bridge or Pentium CPUs. It is recommended to use
     <tspan class="ec-lmtt-10">AppleIntelCpuPowerManagement.kext </tspan>for the former.
     </p></li>
     <li 
  class="enumerate" id="x1-38022x4"><tspan class="ec-lmtt-10">AppleXcpmForceBoost</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.8 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forces maximum performance in XCPM mode.
     <!--l. 2288--><p class="noindent" >This patch writes <tspan class="ec-lmtt-10">0xFF00 </tspan>to <tspan class="ec-lmtt-10">MSR_IA32_PERF_CONTROL </tspan>(<tspan class="ec-lmtt-10">0x199</tspan>), effectively setting maximum multiplier for all the
     time.
     </p><!--l. 2291--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: While this may increase the performance, this patch is strongly discouraged on all systems but those
     explicitly dedicated to scientific or media calculations. In general only certain Xeon models benefit from the
     patch.
     </p></li>
     <li 
  class="enumerate" id="x1-38024x5"><tspan class="ec-lmtt-10">CustomSMBIOSGuid</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Performs GUID patching for <tspan class="ec-lmtt-10">UpdateSMBIOSMode Custom </tspan>mode. Usually relevant for Dell
     laptops.
     </li>
     <li 
  class="enumerate" id="x1-38026x6"><tspan class="ec-lmtt-10">DisableIoMapper</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.8 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables <tspan class="ec-lmtt-10">IOMapper </tspan>support in XNU (VT-d), which may conflict with the firmware implementation.
     <!--l. 2311--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option is a preferred alternative to deleting <tspan class="ec-lmtt-10">DMAR </tspan>ACPI table and disabling VT-d in firmware preferences,
     which does not break VT-d support in other systems in case they need it.
     </p></li>
     <li 
  class="enumerate" id="x1-38028x7"><tspan class="ec-lmtt-10">DisableLinkeditJettison</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 11.0<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables <tspan class="ec-lmtt-10">__LINKEDIT </tspan>jettison code.
     <!--l. 2322--><p class="noindent" >This option lets <tspan class="ec-lmtt-10">Lilu.kext </tspan>and possibly some others function in macOS Big Sur with best performance without
     <tspan class="ec-lmtt-10">keepsyms=1 </tspan>boot argument.
     </p></li>
     <li 
  class="enumerate" id="x1-38030x8"><tspan class="ec-lmtt-10">DisableRtcChecksum</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables primary checksum (<tspan class="ec-lmtt-10">0x58</tspan>-<tspan class="ec-lmtt-10">0x59</tspan>) writing in AppleRTC.
     <!--l. 2334--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: This option will not protect other areas from being overwritten, see <a 
href="https://github.com/acidanthera/RTCMemoryFixup" >RTCMemoryFixup</a> kernel extension if this is
     desired.
     </p><!--l. 2338--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: This option will not protect areas from being overwritten at firmware stage (e.g. macOS bootloader), see
     <tspan class="ec-lmtt-10">AppleRtcRam </tspan>protocol description if this is desired.
     </p></li>
     <li 
  class="enumerate" id="x1-38032x9"><tspan class="ec-lmtt-10">ExtendBTFeatureFlags</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.8<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Set <tspan class="ec-lmtt-10">FeatureFlags </tspan>to <tspan class="ec-lmtt-10">0x0F </tspan>for full functionality of Bluetooth, including Continuity.
     <!--l. 2350--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option is a substitution for BT4LEContinuityFixup.kext, which does not function properly due to late
     patching progress.
     </p></li>
     <li 
  class="enumerate" id="x1-38034x10"><tspan class="ec-lmtt-10">ExternalDiskIcons</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply icon type patches to AppleAHCIPort.kext to force internal disk icons for all AHCI
     disks.
     <!--l. 2361--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option should be avoided whenever possible. Modern firmwares usually have compatible AHCI
     controllers.
     </p></li>
     <li 
  class="enumerate" id="x1-38036x11"><tspan class="ec-lmtt-10">IncreasePciBarSize</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.10<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Increases 32-bit PCI bar size in IOPCIFamily from 1 to 4 GBs.
     <!--l. 2371--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option should be avoided whenever possible. In general the necessity of this option means misconfigured or
     broken firmware.
     </p></li>
     <li 
  class="enumerate" id="x1-38038x12"><tspan class="ec-lmtt-10">LapicKernelPanic</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.6 (64-bit)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables kernel panic on LAPIC interrupts.
     </li>
     <li 
  class="enumerate" id="x1-38040x13"><tspan class="ec-lmtt-10">LegacyCommpage</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.4 - 10.6<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Replaces the default 64-bit commpage bcopy implementation with one that does not require SSSE3, useful
     for legacy platforms. This prevents a <tspan class="ec-lmtt-10">commpage no match for last </tspan>panic due to no available 64-bit bcopy functions
                                                                                                  
                                                                                                  
     that do not require SSSE3.
     </li>
     <li 
  class="enumerate" id="x1-38042x14"><tspan class="ec-lmtt-10">PanicNoKextDump</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.13 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Prevent kernel from printing kext dump in the panic log preventing from observing panic details. Affects
     10.13 and above.
     </li>
     <li 
  class="enumerate" id="x1-38044x15"><tspan class="ec-lmtt-10">PowerTimeoutKernelPanic</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.15 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Disables kernel panic on setPowerState timeout.
     <!--l. 2406--><p class="noindent" >An additional security measure was added to macOS Catalina (10.15) causing kernel panic on power change timeout for
     Apple drivers. Sometimes it may cause issues on misconfigured hardware, notably digital audio, which sometimes fails to
     wake up. For debug kernels <tspan class="ec-lmtt-10">setpowerstate_panic=0 </tspan>boot argument should be used, which is otherwise equivalent to this
     quirk.
     </p></li>
     <li 
  class="enumerate" id="x1-38046x16"><tspan class="ec-lmtt-10">ThirdPartyDrives</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.6 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply vendor patches to IOAHCIBlockStorage.kext to enable native features for third-party drives, such
     as TRIM on SSDs or hibernation support on 10.15 and newer.
     <!--l. 2421--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option may be avoided on user preference. NVMe SSDs are compatible without the change. For AHCI SSDs
     on modern macOS version there is a dedicated built-in utility called <tspan class="ec-lmtt-10">trimforce</tspan>. Starting from 10.15
     this utility creates <tspan class="ec-lmtt-10">EnableTRIM </tspan>variable in <tspan class="ec-lmtt-10">APPLE_BOOT_VARIABLE_GUID </tspan>namespace with <tspan class="ec-lmtt-10">01 00 00 00</tspan>
     value.
     </p></li>
     <li 
  class="enumerate" id="x1-38048x17"><tspan class="ec-lmtt-10">XhciPortLimit</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Requirement</tspan>: 10.11 (not required for older)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Patch various kexts (AppleUSBXHCI.kext, AppleUSBXHCIPCI.kext, IOUSBHostFamily.kext) to remove
     USB port count limit of 15 ports.
     <!--l. 2435--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option should be avoided whenever possible. USB port limit is imposed by the amount of used bits in
     locationID format and there is no possible way to workaround this without heavy OS modification. The only
     valid solution is to limit the amount of used ports to 15 (discarding some). More details can be found on
     <a 
href="https://applelife.ru/posts/550233" >AppleLife.ru</a>.
</p>
     </li></ol>
<a 
 id="x1-38049r41"></a>
<h4 class="subsectionHead"><span class="titlemark">7.9   </span> <a 
 id="x1-390009"></a>Scheme Properties</h4>
<!--l. 2445--><p class="noindent" >These properties are particularly relevant for older macOS operating systems. For more details on how to install and
troubleshoot such macOS installation refer to <a 
href="#x1-740001">Legacy Apple OS</a>.
     </p><ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-39002x1"><tspan class="ec-lmtt-10">FuzzyMatch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Use <tspan class="ec-lmtt-10">kernelcache </tspan>with different checksums when available.
                                                                                                  
                                                                                                  
     <!--l. 2457--><p class="noindent" >On macOS 10.6 and earlier <tspan class="ec-lmtt-10">kernelcache </tspan>filename has a checksum, which essentially is <tspan class="ec-lmtt-10">adler32 </tspan>from SMBIOS
     product name and EfiBoot device path. On certain firmwares EfiBoot device path differs between UEFI and
     macOS due to ACPI or hardware specifics, rendering <tspan class="ec-lmtt-10">kernelcache </tspan>checksum as always different.
     </p><!--l. 2462--><p class="noindent" >This setting allows matching the latest <tspan class="ec-lmtt-10">kernelcache </tspan>with a suitable architecture when the <tspan class="ec-lmtt-10">kernelcache </tspan>without
     suffix is unavailable, improving macOS 10.6 boot performance on several platforms.
     </p></li>
     <li 
  class="enumerate" id="x1-39004x2"><tspan class="ec-lmtt-10">KernelArch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Auto</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Prefer specified kernel architecture (<tspan class="ec-lmtt-10">Auto</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">i386-user32</tspan>, <tspan class="ec-lmtt-10">x86_64</tspan>) when available.
     <!--l. 2473--><p class="noindent" >On macOS 10.7 and earlier XNU kernel can boot with architectures different from the usual <tspan class="ec-lmtt-10">x86_64</tspan>. This setting
     will use the specified architecture to boot macOS when it is supported by the macOS and the configuration:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Auto </tspan>— Choose the preferred architecture automatically.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">i386 </tspan>— Use <tspan class="ec-lmtt-10">i386 </tspan>(32-bit) kernel when available.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">i386-user32 </tspan>— Use <tspan class="ec-lmtt-10">i386 </tspan>(32-bit) kernel when available and force the use of 32-bit userspace on 64-bit
         capable processors if supported by the operating system. On macOS 64-bit capable processors are assumed
         to support <tspan class="ec-lmtt-10">SSSE3</tspan>. This is not the case for older 64-bit capable Pentium processors, which cause some
         applications to crash on macOS 10.6. This behaviour corresponds to <tspan class="ec-lmtt-10">-legacy </tspan>kernel boot argument. This
         option is unavailable for 10.4 and 10.5 when running on 64-bit firmware due to an uninitialised 64-bit
         segment in the XNU kernel, which causes AppleEFIRuntime to incorrectly execute 64-bit code as 16-bit
         code.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">x86_64 </tspan>— Use <tspan class="ec-lmtt-10">x86_64 </tspan>(64-bit) kernel when available.</li></ul>
     <!--l. 2493--><p class="noindent" >Below is the algorithm determining the kernel architecture.
         </p><ol  class="enumerate2" >
         <li 
  class="enumerate" id="x1-39006x1"><tspan class="ec-lmtt-10">arch </tspan>argument in image arguments (e.g. when launched via UEFI Shell) or in <tspan class="ec-lmtt-10">boot-args </tspan>variable overrides
         any compatibility checks and forces the specified architecture, completing this algorithm.
         </li>
         <li 
  class="enumerate" id="x1-39008x2">OpenCore build architecture restricts capabilities to <tspan class="ec-lmtt-10">i386 </tspan>and <tspan class="ec-lmtt-10">i386-user32 </tspan>mode for the 32-bit firmware
         variant.
         </li>
         <li 
  class="enumerate" id="x1-39010x3">Determined EfiBoot version restricts architecture choice:
             <ul class="itemize1">
             <li class="itemize">10.4-10.5 — <tspan class="ec-lmtt-10">i386 </tspan>or <tspan class="ec-lmtt-10">i386-user32 </tspan>(only on 32-bit firmware)
             </li>
             <li class="itemize">10.6 — <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">i386-user32</tspan>, or <tspan class="ec-lmtt-10">x86_64</tspan>
             </li>
             <li class="itemize">10.7 — <tspan class="ec-lmtt-10">i386 </tspan>or <tspan class="ec-lmtt-10">x86_64</tspan>
             </li>
             <li class="itemize">10.8 or newer — <tspan class="ec-lmtt-10">x86_64</tspan></li></ul>
         </li>
         <li 
  class="enumerate" id="x1-39012x4">If <tspan class="ec-lmtt-10">KernelArch </tspan>is set to <tspan class="ec-lmtt-10">Auto </tspan>and <tspan class="ec-lmtt-10">SSSE3 </tspan>is not supported by the CPU, capabilities are restricted to <tspan class="ec-lmtt-10">i386-user32 </tspan>if
         supported by EfiBoot.
         </li>
         <li 
  class="enumerate" id="x1-39014x5">Board identifier (from SMBIOS) based on EfiBoot version disables <tspan class="ec-lmtt-10">x86_64 </tspan>support on an unsupported
         model if any <tspan class="ec-lmtt-10">i386 </tspan>variant is supported. <tspan class="ec-lmtt-10">Auto </tspan>is not consulted here as the list is not overridable in
         EfiBoot.
         </li>
         <li 
  class="enumerate" id="x1-39016x6"><tspan class="ec-lmtt-10">KernelArch </tspan>restricts the support to the explicitly specified architecture (when not set to <tspan class="ec-lmtt-10">Auto</tspan>) if the architecture
         remains present in the capabilities.
                                                                                                  
                                                                                                  
         </li>
         <li 
  class="enumerate" id="x1-39018x7">The best supported architecture is chosen in this order: <tspan class="ec-lmtt-10">x86_64</tspan>, <tspan class="ec-lmtt-10">i386</tspan>, <tspan class="ec-lmtt-10">i386-user32</tspan>.</li></ol>
     <!--l. 2523--><p class="noindent" >Unlike macOS 10.7, where select boards identifiers are treated as the <tspan class="ec-lmtt-10">i386 </tspan>only machines, and macOS 10.5 or
     earlier, where <tspan class="ec-lmtt-10">x86_64 </tspan>is not supported by the macOS kernel, macOS 10.6 is very special. The architecture
     choice on macOS 10.6 depends on many factors including not only the board identifier, but also macOS
     product type (client vs server), macOS point release, and RAM amount. The detection of them all is
     complicated and not practical, because several point releases had genuine bugs and failed to properly perform
     the server detection in the first place. For this reason OpenCore on macOS 10.6 will fallback to <tspan class="ec-lmtt-10">x86_64</tspan>
     architecture whenever it is supported by the board at all, just like on macOS 10.7. As a reference here is
     the 64-bit Mac model compatibility corresponding to actual EfiBoot behaviour on macOS 10.6.8 and
     10.7.5.
</p>
     <div class="center" 
>
<!--l. 2535--><p class="noindent" >
</p>
<div class="tabular"> <table id="TBL-2" class="tabular" 
 
><colgroup id="TBL-2-1g"><col 
id="TBL-2-1" /></colgroup><colgroup id="TBL-2-2g"><col 
id="TBL-2-2" /></colgroup><colgroup id="TBL-2-3g"><col 
id="TBL-2-3" /></colgroup><colgroup id="TBL-2-4g"><col 
id="TBL-2-4" /></colgroup><colgroup id="TBL-2-5g"><col 
id="TBL-2-5" /></colgroup><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-1-"><td  style="white-space:normal; text-align:left;" id="TBL-2-1-1"  
class="td11"><!--l. 2538--><p class="noindent" ><tspan class="ec-lmbx-10">Model</tspan>         </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-1-2"  
class="td11"><tspan class="ec-lmbx-10">10.6 (minimal)</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-1-3"  
class="td11"> <tspan class="ec-lmbx-10">10.6 (client) </tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-1-4"  
class="td11"> <tspan class="ec-lmbx-10">10.6 (server) </tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-1-5"  
class="td11">  <tspan class="ec-lmbx-10">10.7 (any)   </tspan></td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-2-"><td  style="white-space:normal; text-align:left;" id="TBL-2-2-1"  
class="td11"><!--l. 2540--><p class="noindent" >Macmini         </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-2-2"  
class="td11"> 4,x (Mid 2010) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-2-3"  
class="td11"> 5,x (Mid 2011) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-2-4"  
class="td11"> 4,x (Mid 2010) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-2-5"  
class="td11">3,x (Early 2009)</td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-3-"><td  style="white-space:normal; text-align:left;" id="TBL-2-3-1"  
class="td11"><!--l. 2542--><p class="noindent" >MacBook        </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-3-2"  
class="td11">  Unsupported   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-3-3"  
class="td11"> Unsupported  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-3-4"  
class="td11"> Unsupported  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-3-5"  
class="td11"> 5,x (2009/09)  </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-4-"><td  style="white-space:normal; text-align:left;" id="TBL-2-4-1"  
class="td11"><!--l. 2544--><p class="noindent" >MacBookAir    </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-4-2"  
class="td11">  Unsupported   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-4-3"  
class="td11"> Unsupported  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-4-4"  
class="td11"> Unsupported  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-4-5"  
class="td11"> 2,x (Late 2008) </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-5-"><td  style="white-space:normal; text-align:left;" id="TBL-2-5-1"  
class="td11"><!--l. 2546--><p class="noindent" >MacBookPro   </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-5-2"  
class="td11">4,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-5-3"  
class="td11">8,x (Early 2011)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-5-4"  
class="td11">8,x (Early 2011)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-5-5"  
class="td11"> 3,x (Mid 2007) </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-6-"><td  style="white-space:normal; text-align:left;" id="TBL-2-6-1"  
class="td11"><!--l. 2548--><p class="noindent" >iMac              </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-6-2"  
class="td11">8,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-6-3"  
class="td11">12,x (Mid 2011)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-6-4"  
class="td11">12,x (Mid 2011)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-6-5"  
class="td11"> 7,x (Mid 2007) </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-7-"><td  style="white-space:normal; text-align:left;" id="TBL-2-7-1"  
class="td11"><!--l. 2550--><p class="noindent" >MacPro          </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-7-2"  
class="td11">3,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-7-3"  
class="td11"> 5,x (Mid 2010) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-7-4"  
class="td11">3,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-7-5"  
class="td11">3,x (Early 2008)</td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-8-"><td  style="white-space:normal; text-align:left;" id="TBL-2-8-1"  
class="td11"><!--l. 2552--><p class="noindent" >Xserve            </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-8-2"  
class="td11">2,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-8-3"  
class="td11">2,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-8-4"  
class="td11">2,x (Early 2008)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-2-8-5"  
class="td11">2,x (Early 2008)</td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-2-9-"><td  style="white-space:normal; text-align:left;" id="TBL-2-9-1"  
class="td11">             </td>
</tr></table></div></div>
     <!--l. 2557--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: <tspan class="ec-lmtt-10">3+2 </tspan>and <tspan class="ec-lmtt-10">6+4 </tspan>hotkeys to choose the preferred architecture are unsupported due to being handled by EfiBoot and
     thus being hard to properly detect.
     </p></li>
     <li 
  class="enumerate" id="x1-39020x3"><tspan class="ec-lmtt-10">KernelCache</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Auto</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Prefer specified kernel cache type (<tspan class="ec-lmtt-10">Auto</tspan>, <tspan class="ec-lmtt-10">Cacheless</tspan>, <tspan class="ec-lmtt-10">Mkext</tspan>, <tspan class="ec-lmtt-10">Prelinked</tspan>) when available.
     <!--l. 2568--><p class="noindent" >Different variants of macOS support different kernel caching variants designed to improve boot performance. This setting
     prevents the use of faster kernel caching variants if slower variants are available for debugging and stability reasons. I.e.,
     by specifying <tspan class="ec-lmtt-10">Mkext</tspan>, <tspan class="ec-lmtt-10">Prelinked </tspan>will be disabled for e.g. 10.6 but not for 10.7.
     </p><!--l. 2573--><p class="noindent" >The list of available kernel caching types and its current support in OpenCore is listed below.
</p>
     <div class="center" 
>
<!--l. 2575--><p class="noindent" >
</p>
<div class="tabular"> <table id="TBL-3" class="tabular" 
 
><colgroup id="TBL-3-1g"><col 
id="TBL-3-1" /></colgroup><colgroup id="TBL-3-2g"><col 
id="TBL-3-2" /></colgroup><colgroup id="TBL-3-3g"><col 
id="TBL-3-3" /></colgroup><colgroup id="TBL-3-4g"><col 
id="TBL-3-4" /></colgroup><colgroup id="TBL-3-5g"><col 
id="TBL-3-5" /></colgroup><colgroup id="TBL-3-6g"><col 
id="TBL-3-6" /></colgroup><colgroup id="TBL-3-7g"><col 
id="TBL-3-7" /></colgroup><colgroup id="TBL-3-8g"><col 
id="TBL-3-8" /></colgroup><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-1-"><td  style="white-space:normal; text-align:left;" id="TBL-3-1-1"  
class="td11"><!--l. 2578--><p class="noindent" ><tspan class="ec-lmbx-10">macOS</tspan>   </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-2"  
class="td11"><tspan class="ec-lmbx-10">i386 NC</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-3"  
class="td11"><tspan class="ec-lmbx-10">i386 MK</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-4"  
class="td11"><tspan class="ec-lmbx-10">i386 PK</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-5"  
class="td11"><tspan class="ec-lmbx-10">x86_64 NC</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-6"  
class="td11"><tspan class="ec-lmbx-10">x86_64 MK</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-7"  
class="td11"><tspan class="ec-lmbx-10">x86_64 PK</tspan></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-1-8"  
class="td11"><tspan class="ec-lmbx-10">x86_64 KC</tspan></td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-2-"><td  style="white-space:normal; text-align:left;" id="TBL-3-2-1"  
class="td11"><!--l. 2580--><p class="noindent" >10.4          </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-2"  
class="td11">  YES   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-3"  
class="td11">YES (V1)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-4"  
class="td11"> NO (V1) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-5"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-7"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-2-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-3-"><td  style="white-space:normal; text-align:left;" id="TBL-3-3-1"  
class="td11"><!--l. 2582--><p class="noindent" >10.5          </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-2"  
class="td11">  YES   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-3"  
class="td11">YES (V1)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-4"  
class="td11"> NO (V1) </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-5"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-7"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-3-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-4-"><td  style="white-space:normal; text-align:left;" id="TBL-3-4-1"  
class="td11"><!--l. 2584--><p class="noindent" >10.6          </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-2"  
class="td11">  YES   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-3"  
class="td11">YES (V2)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-4"  
class="td11">YES (V2)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-5"  
class="td11">    YES      </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-6"  
class="td11">  YES (V2)   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-7"  
class="td11"> YES (V2)  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-4-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-5-"><td  style="white-space:normal; text-align:left;" id="TBL-3-5-1"  
class="td11"><!--l. 2586--><p class="noindent" >10.7          </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-2"  
class="td11">  YES   </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-3"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-4"  
class="td11">YES (V3)</td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-5"  
class="td11">    YES      </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-7"  
class="td11"> YES (V3)  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-5-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-6-"><td  style="white-space:normal; text-align:left;" id="TBL-3-6-1"  
class="td11"><!--l. 2588--><p class="noindent" >10.8-10.9    </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-2"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-3"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-4"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-5"  
class="td11">    YES      </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-7"  
class="td11"> YES (V3)  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-6-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-7-"><td  style="white-space:normal; text-align:left;" id="TBL-3-7-1"  
class="td11"><!--l. 2590--><p class="noindent" >10.10-10.15 </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-2"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-3"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-4"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-5"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-7"  
class="td11"> YES (V3)  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-7-8"  
class="td11">     —       </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-8-"><td  style="white-space:normal; text-align:left;" id="TBL-3-8-1"  
class="td11"><!--l. 2592--><p class="noindent" >11.0+        </p></td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-2"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-3"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-4"  
class="td11">   —     </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-5"  
class="td11">     —       </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-6"  
class="td11">     —        </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-7"  
class="td11"> YES (V3)  </td><td  style="white-space:nowrap; text-align:center;" id="TBL-3-8-8"  
class="td11">    YES      </td>
</tr><tr 
class="hline"><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td><td><hr /></td></tr><tr  
 style="vertical-align:baseline;" id="TBL-3-9-"><td  style="white-space:normal; text-align:left;" id="TBL-3-9-1"  
class="td11">          </td>
</tr></table></div></div>
     <!--l. 2597--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: First version (V1) of 32-bit <tspan class="ec-lmtt-10">prelinkedkernel </tspan>is unsupported due to kext symbol tables being corrupted by the
     tools. On these versions <tspan class="ec-lmtt-10">Auto </tspan>will block <tspan class="ec-lmtt-10">prelinkedkernel </tspan>booting. This also makes <tspan class="ec-lmtt-10">keepsyms=1 </tspan>for kext frames broken
     on these systems.
</p>
                                                                                                  
                                                                                                  
     </li></ol>
<a 
 id="x1-39021r33"></a>
<h3 class="sectionHead"><span class="titlemark">8   </span> <a 
 id="x1-400008"></a>Misc</h3>
<a 
 id="x1-40001r42"></a>
<h4 class="subsectionHead"><span class="titlemark">8.1   </span> <a 
 id="x1-410001"></a>Introduction</h4>
<!--l. 2609--><p class="noindent" >This section contains miscellaneous configuration affecting OpenCore operating system loading behaviour as well as other
entries, which do not go to any other section.
</p><!--l. 2612--><p class="noindent" >OpenCore tries to follow “bless” model also known as “Apple Boot Policy”. The primary specialty of “bless” model is to
allow embedding boot options within the file system (and be accessible through a specialised driver) as well as
supporting a broader range of predefined boot paths compared to the removable media list found in the UEFI
specification.
</p><!--l. 2617--><p class="noindent" >Each partition will only be used for booting when it corresponds to “Scan policy”: a set of restrictions to only use partitions
with specific file systems and from specific device types. Scan policy behaviour is discussed in <tspan class="ec-lmtt-10">ScanPolicy </tspan>property
description.
</p><!--l. 2621--><p class="noindent" >Scan process starts with obtaining all the partitions filtered with “Scan policy”. Each partition may produce multiple primary
and alternate options. Primary options describe operating systems installed on this media. Alternate options describe recovery
options for the operating systems on the media. It is possible for alternate options to exist without primary options and vice
versa. Be warned that the options may not necessarily describe the operating systems on the same partition. Each primary and
alternate option can be an auxiliary option or not, refer to <tspan class="ec-lmtt-10">HideAuxiliary </tspan>for more details. Algorithm to determine boot
options behaves as follows:
     </p><ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-41002x1">Obtain all available partition handles filtered by “Scan policy” (and driver availability).
     </li>
     <li 
  class="enumerate" id="x1-41004x2">Obtain all available boot options from <tspan class="ec-lmtt-10">BootOrder </tspan>UEFI variable.
     </li>
     <li 
  class="enumerate" id="x1-41006x3">For each found boot option:
         <ul class="itemize1">
         <li class="itemize">Retrieve device path of the boot option.
         </li>
         <li class="itemize">Perform fixups (e.g. NVMe subtype correction) and expansion (e.g. for Boot Camp) of the device path.
         </li>
         <li class="itemize">Obtain device handle by locating device path of the resulting device path (ignore it on failure).
         </li>
         <li class="itemize">Find device handle in the list of partition handles (ignore it if missing).
         </li>
         <li class="itemize">For disk device paths (not specifying a bootloader) execute “bless” (may return &#x003E; 1 entry).
         </li>
         <li class="itemize">For file device paths check presence on the file system directly.
         </li>
         <li class="itemize">On OpenCore boot partition exclude all OpenCore bootstrap files by header checks.
         </li>
         <li class="itemize">Mark device handle as <tspan class="ec-lmri-10">used </tspan>in the list of partition handles if any.
         </li>
         <li class="itemize">Register the resulting entries as primary options and determine their types. <br 
class="newline" />The option will become auxiliary for some types (e.g. Apple HFS recovery).</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-41008x4">For each partition handle:
         <ul class="itemize1">
         <li class="itemize">If partition handle is marked as <tspan class="ec-lmri-10">unused </tspan>execute “bless” primary option list retrieval. <br 
class="newline" />In case <tspan class="ec-lmtt-10">BlessOverride </tspan>list is set, not only standard “bless” paths will be found but also custom ones.
         </li>
         <li class="itemize">On OpenCore boot partition exclude all OpenCore bootstrap files by header checks.
         </li>
         <li class="itemize">Register the resulting entries as primary options and determine their types if found. <br 
class="newline" />The option will become auxiliary for some types (e.g. Apple HFS recovery).
         </li>
         <li class="itemize">If partition already has primary options of “Apple Recovery” type proceed to next handle.
         </li>
         <li class="itemize">Lookup alternate entries by “bless” recovery option list retrieval and predefined paths.
         </li>
         <li class="itemize">Register the resulting entries as alternate auxiliary options and determine their types if found.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-41010x5">Custom entries and tools are added as primary options without any checks with respect to <tspan class="ec-lmtt-10">Auxiliary</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-41012x6">System entries (e.g. <tspan class="ec-lmtt-10">Reset NVRAM</tspan>) are added as primary auxiliary options.</li></ol>
<!--l. 2669--><p class="noindent" >The display order of the boot options in the picker and the boot process are determined separately from the scanning
algorithm. The display order as follows:
</p>
     <ul class="itemize1">
     <li class="itemize">Alternate options follow corresponding primary options, i.e. Apple recovery will be following the relevant macOS
     option whenever possible.
     </li>
     <li class="itemize">Options will be listed in file system handle firmware order to maintain an established order across the reboots
     regardless of the chosen operating system for loading.
     </li>
     <li class="itemize">Custom entries, tools, and system entries will be added after all other options.
     </li>
     <li class="itemize">Auxiliary options will only show upon entering “Advanced Mode” in the picker (usually by pressing “Space”).</li></ul>
<!--l. 2682--><p class="noindent" >The boot process is as follows: </p>
     <ul class="itemize1">
     <li class="itemize">Try looking up first valid primary option through <tspan class="ec-lmtt-10">BootNext </tspan>UEFI variable.
     </li>
     <li class="itemize">On failure looking up first valid primary option through <tspan class="ec-lmtt-10">BootOrder </tspan>UEFI variable.
     </li>
     <li class="itemize">Mark the option as the default option to boot.
     </li>
     <li class="itemize">Boot option through the picker or without it depending on the <tspan class="ec-lmtt-10">ShowPicker </tspan>option.
     </li>
     <li class="itemize">Show picker on failure otherwise.</li></ul>
<!--l. 2692--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: This process is meant to work reliably only when <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>option is enabled or the
firmware does not control UEFI boot options (<tspan class="ec-lmtt-10">OpenDuetPkg </tspan>or custom BDS). Without <tspan class="ec-lmtt-10">BootProtect </tspan>it also
is possible that other operating systems overwrite OpenCore, make sure to enable it when planning to use
them.
</p><!--l. 2697--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: UEFI variable boot options’ boot arguments will be removed if present as they may contain arguments compromising
the operating system, which is undesired once secure boot is enabled.
</p><!--l. 2701--><p class="noindent" ><tspan class="ec-lmri-10">Note 3</tspan>: Some operating systems, namely Windows, will create their boot option and mark it as top most upon
first boot or after NVRAM Reset. When this happens default boot entry choice will update till next manual
reconfiguration.
<a 
 id="x1-41013r44"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">8.2   </span> <a 
 id="x1-420002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-42002x1"><tspan class="ec-lmtt-10">Boot</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply boot configuration described in <a 
href="#x1-430003">Boot Properties</a> section below.
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-42004x2"><tspan class="ec-lmtt-10">BlessOverride</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Add custom scanning paths through bless model.
     <!--l. 2719--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string </tspan>entries containing absolute UEFI paths to customised bootloaders,
     for  example,  <tspan class="ec-lmtt-10">\EFI\debian\grubx64.efi </tspan>for  Debian  bootloader.  This  allows  unusual  boot  paths  to  be
     automatically discovered by the boot picker. Designwise they are equivalent to predefined blessed path, such
     as <tspan class="ec-lmtt-10">\System\Library\CoreServices\boot.efi </tspan>or <tspan class="ec-lmtt-10">\EFI\Microsoft\Boot\bootmgfw.efi</tspan>, but unlike predefined
     bless paths they have highest priority.
     </p></li>
     <li 
  class="enumerate" id="x1-42006x3"><tspan class="ec-lmtt-10">Debug</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply debug configuration described in <a 
href="#x1-440004">Debug Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-42008x4"><tspan class="ec-lmtt-10">Entries</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Add boot entries to boot picker.
     <!--l. 2739--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each load entry. See <a 
href="#x1-460006">Entry Properties</a> section below.
     </p></li>
     <li 
  class="enumerate" id="x1-42010x5"><tspan class="ec-lmtt-10">Security</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply security configuration described in <a 
href="#x1-450005">Security Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-42012x6"><tspan class="ec-lmtt-10">Tools</tspan><a 
 id="x1-420116"></a><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Add tool entries to boot picker.
     <!--l. 2753--><p class="noindent" >Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing each load entry. See <a 
href="#x1-460006">Entry Properties</a> section below.
     </p><!--l. 2756--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>:  Select  tools,  for  example,  UEFI  Shell,  are  very  dangerous  and  <tspan class="ec-lmbx-10">MUST  NOT </tspan>appear  in  production
     configurations, especially in vaulted ones and protected with secure boot, as they may be used to easily bypass
     secure boot chain. For tool examples check the <a 
href="#x1-620003">UEFI</a> section of this document.
</p>
     </li></ol>
<a 
 id="x1-42013r45"></a>
<h4 class="subsectionHead"><span class="titlemark">8.3   </span> <a 
 id="x1-430003"></a>Boot Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-43002x1"><tspan class="ec-lmtt-10">ConsoleAttributes</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets specific attributes for console.
     <!--l. 2774--><p class="noindent" >Text renderer supports colour arguments as a sum of foreground and background colours according to UEFI
     specification. The value of black background and black foreground (<tspan class="ec-lmtt-10">0</tspan>) is reserved. List of colour names:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x00 </tspan>— <tspan class="ec-lmtt-10">EFI_BLACK</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x01 </tspan>— <tspan class="ec-lmtt-10">EFI_BLUE</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x02 </tspan>— <tspan class="ec-lmtt-10">EFI_GREEN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x03 </tspan>— <tspan class="ec-lmtt-10">EFI_CYAN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x04 </tspan>— <tspan class="ec-lmtt-10">EFI_RED</tspan>
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x05 </tspan>— <tspan class="ec-lmtt-10">EFI_MAGENTA</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x06 </tspan>— <tspan class="ec-lmtt-10">EFI_BROWN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x07 </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTGRAY</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x08 </tspan>— <tspan class="ec-lmtt-10">EFI_DARKGRAY</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x09 </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTBLUE</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0A </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTGREEN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0B </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTCYAN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0C </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTRED</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0D </tspan>— <tspan class="ec-lmtt-10">EFI_LIGHTMAGENTA</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0E </tspan>— <tspan class="ec-lmtt-10">EFI_YELLOW</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0F </tspan>— <tspan class="ec-lmtt-10">EFI_WHITE</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_BLACK</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x10 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_BLUE</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x20 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_GREEN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x30 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_CYAN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x40 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_RED</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x50 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_MAGENTA</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x60 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_BROWN</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x70 </tspan>— <tspan class="ec-lmtt-10">EFI_BACKGROUND_LIGHTGRAY</tspan></li></ul>
     <!--l. 2806--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option may not work well with <tspan class="ec-lmtt-10">System </tspan>text renderer. Setting a background different from black could help
     testing proper GOP functioning.
     </p></li>
     <li 
  class="enumerate" id="x1-43004x2"><tspan class="ec-lmtt-10">HibernateMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">None</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Hibernation detection mode. The following modes are supported:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">None </tspan>— Avoid hibernation (Recommended).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Auto </tspan>— Use RTC and NVRAM detection.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">RTC </tspan>— Use RTC detection.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">NVRAM </tspan>— Use NVRAM detection.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-43006x3"><tspan class="ec-lmtt-10">HideAuxiliary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Hides auxiliary entries from picker menu by default.
     <!--l. 2829--><p class="noindent" >An entry is considered auxiliary when at least one of the following applies:
</p>
         <ul class="itemize1">
         <li class="itemize">Entry is macOS recovery.
         </li>
         <li class="itemize">Entry is macOS Time Machine.
         </li>
         <li class="itemize">Entry is explicitly marked as <tspan class="ec-lmtt-10">Auxiliary</tspan>.
         </li>
         <li class="itemize">Entry is system (e.g. <tspan class="ec-lmtt-10">Reset NVRAM</tspan>).</li></ul>
     <!--l. 2839--><p class="noindent" >To see all entries picker menu needs to be reloaded in extended mode by pressing <tspan class="ec-lmtt-10">Spacebar </tspan>key. Hiding auxiliary entries
     may increase boot performance for multidisk systems.
     </p></li>
     <li 
  class="enumerate" id="x1-43008x4"><tspan class="ec-lmtt-10">PickerAttributes</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets specific attributes for picker.
     <!--l. 2849--><p class="noindent" >Different pickers may be configured through the attribute mask containing OpenCore-reserved (<tspan class="ec-lmtt-10">BIT0</tspan>~<tspan class="ec-lmtt-10">BIT15</tspan>) and
     OEM-specific (<tspan class="ec-lmtt-10">BIT16</tspan>~<tspan class="ec-lmtt-10">BIT31</tspan>) values.
     </p><!--l. 2853--><p class="noindent" >Current OpenCore values include:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x0001 </tspan>— <tspan class="ec-lmtt-10">OC_ATTR_USE_VOLUME_ICON</tspan>, provides custom icons for boot entries:
         <!--l. 2860--><p class="noindent" >For <tspan class="ec-lmtt-10">Tools </tspan>OpenCore will try to load a custom icon and fallback to the default icon: </p>
             <ul class="itemize2">
             <li class="itemize"><tspan class="ec-lmtt-10">ResetNVRAM </tspan>— <tspan class="ec-lmtt-10">Resources\Image\ResetNVRAM.icns </tspan>— <tspan class="ec-lmtt-10">ResetNVRAM.icns </tspan>from icons directory.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">Tools\&#x003C;TOOL_RELATIVE_PATH&#x003E;.icns </tspan>— icon near the tool file with appended <tspan class="ec-lmtt-10">.icns </tspan>extension.</li></ul>
         <!--l. 2869--><p class="noindent" >For custom boot <tspan class="ec-lmtt-10">Entries </tspan>OpenCore will try to load a custom icon and fallback to the volume icon or the default
         icon: </p>
             <ul class="itemize2">
             <li class="itemize"><tspan class="ec-lmtt-10">&#x003C;ENTRY_PATH&#x003E;.icns </tspan>— icon near the entry file with appended <tspan class="ec-lmtt-10">.icns </tspan>extension.</li></ul>
         <!--l. 2876--><p class="noindent" >For all other entries OpenCore will try to load a volume icon and fallback to the default icon: </p>
             <ul class="itemize2">
             <li class="itemize"><tspan class="ec-lmtt-10">.VolumeIcon.icns </tspan>file at <tspan class="ec-lmtt-10">Preboot </tspan>root for APFS.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">.VolumeIcon.icns </tspan>file at volume root for other filesystems.</li></ul>
         <!--l. 2883--><p class="noindent" >Volume icons can be set in Finder. Note, that enabling this may result in external and internal icons to be
         indistinguishable.
         </p></li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0002 </tspan>— <tspan class="ec-lmtt-10">OC_ATTR_USE_DISK_LABEL_FILE</tspan>, provides custom rendered titles for boot entries:
             <ul class="itemize2">
             <li class="itemize"><tspan class="ec-lmtt-10">.disk_label </tspan>(<tspan class="ec-lmtt-10">.disk_label_2x</tspan>) file near bootloader for all filesystems.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">&#x003C;TOOL_NAME&#x003E;.lbl </tspan>(<tspan class="ec-lmtt-10">&#x003C;TOOL_NAME&#x003E;.l2x</tspan>) file near tool for <tspan class="ec-lmtt-10">Tools</tspan>.</li></ul>
         <!--l. 2892--><p class="noindent" >Prerendered labels can be generated via <tspan class="ec-lmtt-10">disklabel </tspan>utility or <tspan class="ec-lmtt-10">bless </tspan>command. When disabled or missing text labels
         (<tspan class="ec-lmtt-10">.contentDetails </tspan>or <tspan class="ec-lmtt-10">.disk_label.contentDetails</tspan>) are to be rendered instead.
         </p></li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0004 </tspan>— <tspan class="ec-lmtt-10">OC_ATTR_USE_GENERIC_LABEL_IMAGE</tspan>, provides predefined label images for boot entries without custom
         entries. May give less detail for the actual boot entry.
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0008 </tspan>— <tspan class="ec-lmtt-10">OC_ATTR_USE_ALTERNATE_ICONS</tspan>, changes used icon set to an alternate one if it is supported. For
         example, this could make a use of old-style icons with a custom background colour.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-43010x5"><tspan class="ec-lmtt-10">PickerAudioAssist</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable screen reader by default in boot picker.
     <!--l. 2909--><p class="noindent" >For macOS bootloader screen reader preference is set in <tspan class="ec-lmtt-10">preferences.efires </tspan>archive in <tspan class="ec-lmtt-10">isVOEnabled.int32 </tspan>file and is
     controlled by the operating system. For OpenCore screen reader support this option is an independent equivalent.
     Toggling screen reader support in both OpenCore boot picker and macOS bootloader FileVault 2 login window can also
     be done with <tspan class="ec-lmtt-10">Command </tspan>+ <tspan class="ec-lmtt-10">F5 </tspan>key combination.
     </p><!--l. 2916--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: screen reader requires working audio support, see <a 
href="#x1-670008"><tspan class="ec-lmtt-10">UEFI Audio Properties</tspan></a> section for more details.
     </p></li>
     <li 
  class="enumerate" id="x1-43012x6"><tspan class="ec-lmtt-10">PollAppleHotKeys</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable <tspan class="ec-lmtt-10">modifier hotkey </tspan>handling in boot picker.
     <!--l. 2926--><p class="noindent" >In addition to <tspan class="ec-lmtt-10">action hotkeys</tspan>, which are partially described in <tspan class="ec-lmtt-10">PickerMode </tspan>section and are normally
     handled by Apple BDS, there exist modifier keys, which are handled by operating system bootloader,
     namely <tspan class="ec-lmtt-10">boot.efi</tspan>. These keys allow to change operating system behaviour by providing different boot
     modes.
     </p><!--l. 2931--><p class="noindent" >On some firmwares it may be problematic to use modifier keys due to driver incompatibilities. To workaround this
     problem this option allows registering select hotkeys in a more permissive manner from within boot picker. Such
     extensions include the support of tapping on keys in addition to holding and pressing <tspan class="ec-lmtt-10">Shift </tspan>along with other keys
     instead of just <tspan class="ec-lmtt-10">Shift </tspan>alone, which is not detectable on many PS/2 keyboards. This list of known <tspan class="ec-lmtt-10">modifier hotkeys</tspan>
     includes: </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">CMD+C+MINUS </tspan>— disable board compatibility checking.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">CMD+K </tspan>— boot release kernel, similar to <tspan class="ec-lmtt-10">kcsuffix=release</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">CMD+S </tspan>— single user mode.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">CMD+S+MINUS </tspan>— disable KASLR slide, requires disabled SIP.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">CMD+V </tspan>— verbose mode.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Shift </tspan>— safe mode.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-43014x7"><tspan class="ec-lmtt-10">ShowPicker</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Show simple boot picker to allow boot entry selection.
     </li>
     <li 
  class="enumerate" id="x1-43016x8"><tspan class="ec-lmtt-10">TakeoffDelay</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 32 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Delay in microseconds performed before handling picker startup and <tspan class="ec-lmtt-10">action hotkeys</tspan>.
     <!--l. 2960--><p class="noindent" >Introducing a delay may give extra time to hold the right <tspan class="ec-lmtt-10">action hotkey </tspan>sequence to e.g. boot to recovery mode. On
     some platforms setting this option to at least <tspan class="ec-lmtt-10">5000-10000 </tspan>microseconds may be necessary to access <tspan class="ec-lmtt-10">action hotkeys </tspan>at
     all due to the nature of the keyboard driver.
                                                                                                  
                                                                                                  
     </p></li>
     <li 
  class="enumerate" id="x1-43018x9"><tspan class="ec-lmtt-10">Timeout</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 32 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Timeout in seconds in boot picker before automatic booting of the default boot entry. Use 0 to disable
     timer.
     </li>
     <li 
  class="enumerate" id="x1-43020x10"><tspan class="ec-lmtt-10">PickerMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Builtin</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Choose boot picker used for boot management.
     <!--l. 2978--><p class="noindent" >Picker describes underlying boot management with an optional user interface responsible for handling boot options. The
     following values are supported:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Builtin </tspan>— boot management is handled by OpenCore, a simple text only user interface is used.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">External </tspan>— an external boot management protocol is used if available. Otherwise <tspan class="ec-lmtt-10">Builtin </tspan>mode is used.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Apple </tspan>— Apple boot management is used if available. Otherwise <tspan class="ec-lmtt-10">Builtin </tspan>mode is used.</li></ul>
     <!--l. 2991--><p class="noindent" >Upon success <tspan class="ec-lmtt-10">External </tspan>mode will entirely disable all boot management in OpenCore except policy enforcement. In
     <tspan class="ec-lmtt-10">Apple </tspan>mode it may additionally bypass policy enforcement. See <a 
href="#x1-630004">OpenCanopy</a> plugin for an example of a custom user
     interface.
     </p><!--l. 2996--><p class="noindent" >OpenCore built-in boot picker contains a set of actions chosen during the boot process. The list of supported actions is
     similar to Apple BDS and in general can be accessed by holding <tspan class="ec-lmtt-10">action hotkeys </tspan>during boot process. Currently the
     following actions are considered:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Default </tspan>— this is the default option, and it lets OpenCore built-in boot picker to loads the default boot
         option as specified in <a 
href="https://support.apple.com/HT202796" >Startup Disk</a> preference pane.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ShowPicker </tspan>— this option forces picker to show. Normally it can be achieved by holding <tspan class="ec-lmtt-10">OPT </tspan>key during
         boot. Setting <tspan class="ec-lmtt-10">ShowPicker </tspan>to <tspan class="ec-lmtt-10">true </tspan>will make <tspan class="ec-lmtt-10">ShowPicker </tspan>the default option.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ResetNvram </tspan>—  this  option  performs  select  UEFI  variable  erase  and  is  normally  achieved  by  holding
         <tspan class="ec-lmtt-10">CMD+OPT+P+R </tspan>key combination during boot. Another way to erase UEFI variables is to choose <tspan class="ec-lmtt-10">Reset NVRAM</tspan>
         in the picker. This option requires <tspan class="ec-lmtt-10">AllowNvramReset </tspan>to be set to <tspan class="ec-lmtt-10">true</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BootApple </tspan>— this options performs booting to the first found Apple operating system unless the default
         chosen operating system is already made by Apple. Hold <tspan class="ec-lmtt-10">X </tspan>key to choose this option.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BootAppleRecovery </tspan>— this option performs booting to Apple operating system recovery. Either the one
         related to the default chosen operating system, or first found in case default chosen operating system is not
         made by Apple or has no recovery. Hold <tspan class="ec-lmtt-10">CMD+R </tspan>key combination to choose this option.</li></ul>
     <!--l. 3022--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: Activated <tspan class="ec-lmtt-10">KeySupport</tspan>, <tspan class="ec-lmtt-10">OpenUsbKbDxe</tspan>, or similar driver is required for key handling to work. On many firmwares
     it is not possible to get all the keys function.
     </p><!--l. 3025--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: In addition to <tspan class="ec-lmtt-10">OPT </tspan>OpenCore supports <tspan class="ec-lmtt-10">Escape </tspan>key to display picker when <tspan class="ec-lmtt-10">ShowPicker </tspan>is disabled. This key exists
     for <tspan class="ec-lmtt-10">Apple </tspan>picker mode and for firmwares with PS/2 keyboards that fail to report held <tspan class="ec-lmtt-10">OPT </tspan>key and require continual
     presses of <tspan class="ec-lmtt-10">Escape </tspan>key to enter the boot menu.
     </p><!--l. 3030--><p class="noindent" ><tspan class="ec-lmri-10">Note 3</tspan>: On Macs with problematic GOP it may be difficult to access Apple BootPicker. <tspan class="ec-lmtt-10">BootKicker </tspan>utility can be
     blessed to workaround this problem even without loading OpenCore. On some Macs <tspan class="ec-lmtt-10">BootKicker </tspan>will not run from
     OpenCore.
</p>
                                                                                                  
                                                                                                  
     </li></ol>
<a 
 id="x1-43021r46"></a>
<h4 class="subsectionHead"><span class="titlemark">8.4   </span> <a 
 id="x1-440004"></a>Debug Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-44002x1"><tspan class="ec-lmtt-10">AppleDebug</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable <tspan class="ec-lmtt-10">boot.efi </tspan>debug log saving to OpenCore log.
     <!--l. 3046--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option only applies to 10.15.4 and newer.
     </p></li>
     <li 
  class="enumerate" id="x1-44004x2"><tspan class="ec-lmtt-10">ApplePanic</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Save macOS kernel panic to OpenCore root partition.
     <!--l. 3054--><p class="noindent" >The file is saved as <tspan class="ec-lmtt-10">panic-YYYY-MM-DD-HHMMSS.txt</tspan>. It is strongly recommended to have <tspan class="ec-lmtt-10">keepsyms=1 </tspan>boot
     argument to see debug symbols in the panic log. In case it was not present <tspan class="ec-lmtt-10">kpdescribe.sh </tspan>utility (bundled with
     OpenCore) may be used to partially recover the stacktrace.
     </p><!--l. 3059--><p class="noindent" >Development  and  debug  kernels  produce  more  helpful  kernel  panics.  Consider  downloading  and  installing
     <tspan class="ec-lmtt-10">KernelDebugKit </tspan>from <a 
href="https://developer.apple.com" >developer.apple.com</a> when debugging a problem. To activate a development kernel the
     boot argument <tspan class="ec-lmtt-10">kcsuffix=development </tspan>should be added. Use <tspan class="ec-lmtt-10">uname -a </tspan>command to ensure that the current
     loaded kernel is a development (or a debug) kernel.
     </p><!--l. 3066--><p class="noindent" >In case OpenCore kernel panic saving mechanism was not used, kernel panics may still be found in <br 
class="newline" /><tspan class="ec-lmtt-10">/Library/Logs/DiagnosticReports </tspan>directory. Starting with macOS Catalina kernel panics are stored in JSON
     format, so they need to be preprocessed before passing to <tspan class="ec-lmtt-10">kpdescribe.sh</tspan>:
</p>
     <!--l. 3072-->
<a 
 id="x1-440032"></a>
     <div class="lstlisting" id="listing-5"><span class="label"><a 
 id="x1-44005r1"></a></span><tspan class="ec-lmtk-10">cat</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Kernel</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">panic</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">grep</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">macOSProcessedStackshotData</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-44006r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">python</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">c</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">import</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">json</tspan><tspan class="ec-lmtt-10">,</tspan><tspan class="ec-lmtt-10">sys</tspan><tspan class="ec-lmtt-10">;</tspan><tspan class="ec-lmtt-10">print</tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">json</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">load</tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">sys</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">stdin</tspan><tspan class="ec-lmtt-10">)[</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">macOSPanicString</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">])</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan>
     
     </div>
     </li>
     <li 
  class="enumerate" id="x1-44008x3"><tspan class="ec-lmtt-10">DisableWatchDog</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Select firmwares may not succeed in quickly booting the operating system, especially in
     debug mode, which results in watch dog timer aborting the process. This option turns off watch dog
     timer.
     </li>
     <li 
  class="enumerate" id="x1-44010x4"><tspan class="ec-lmtt-10">DisplayDelay</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Delay in microseconds performed after every printed line visible onscreen (i.e. console).
     </li>
     <li 
  class="enumerate" id="x1-44012x5"><tspan class="ec-lmtt-10">DisplayLevel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: EDK II debug level bitmask (sum) showed onscreen. Unless <tspan class="ec-lmtt-10">Target </tspan>enables console (onscreen)
     printing, onscreen debug output will not be visible. The following levels are supported (discover more in
     <a 
href="https://github.com/acidanthera/audk/blob/master/MdePkg/Include/Library/DebugLib.h" >DebugLib.h</a>):
                                                                                                  
                                                                                                  
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000002 </tspan>(bit <tspan class="ec-lmtt-10">1</tspan>) — <tspan class="ec-lmtt-10">DEBUG_WARN </tspan>in <tspan class="ec-lmtt-10">DEBUG</tspan>, <tspan class="ec-lmtt-10">NOOPT</tspan>, <tspan class="ec-lmtt-10">RELEASE</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000040 </tspan>(bit <tspan class="ec-lmtt-10">6</tspan>) — <tspan class="ec-lmtt-10">DEBUG_INFO </tspan>in <tspan class="ec-lmtt-10">DEBUG</tspan>, <tspan class="ec-lmtt-10">NOOPT</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00400000 </tspan>(bit <tspan class="ec-lmtt-10">22</tspan>) — <tspan class="ec-lmtt-10">DEBUG_VERBOSE </tspan>in custom builds.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x80000000 </tspan>(bit <tspan class="ec-lmtt-10">31</tspan>) — <tspan class="ec-lmtt-10">DEBUG_ERROR </tspan>in <tspan class="ec-lmtt-10">DEBUG</tspan>, <tspan class="ec-lmtt-10">NOOPT</tspan>, <tspan class="ec-lmtt-10">RELEASE</tspan>.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-44014x6"><tspan class="ec-lmtt-10">SerialInit</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Perform serial port initialisation.
     <!--l. 3119--><p class="noindent" >This option will perform serial port initialisation within OpenCore prior to enabling (any) debug logging. Serial port
     configuration is defined via PCDs at compile time in <tspan class="ec-lmtt-10">gEfiMdeModulePkgTokenSpaceGuid </tspan>GUID. Default values as found
     in <tspan class="ec-lmtt-10">MdeModulePkg.dec </tspan>are as follows:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">PcdSerialBaudRate </tspan>— Baud rate: <tspan class="ec-lmtt-10">115200</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">PcdSerialLineControl </tspan>— Line control: no parity, 8 data bits, 1 stop bit.</li></ul>
     <!--l. 3130--><p class="noindent" >See more details in <a 
href="#x1-820004"><tspan class="ec-lmtt-10">Debugging</tspan></a> section.
     </p></li>
     <li 
  class="enumerate" id="x1-44016x7"><tspan class="ec-lmtt-10">SysReport</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Produce system report on ESP folder.
     <!--l. 3138--><p class="noindent" >This option will create a <tspan class="ec-lmtt-10">SysReport </tspan>directory on ESP partition unless it is already present. The directory will contain
     ACPI and SMBIOS dumps.
     </p><!--l. 3141--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: For security reasons <tspan class="ec-lmtt-10">SysReport </tspan>option is <tspan class="ec-lmbx-10">not </tspan>available in <tspan class="ec-lmtt-10">RELEASE </tspan>builds. Use a <tspan class="ec-lmtt-10">DEBUG </tspan>build if this option is
     needed.
     </p></li>
     <li 
  class="enumerate" id="x1-44018x8"><tspan class="ec-lmtt-10">Target</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: A bitmask (sum) of enabled logging targets. By default all the logging output is hidden, so this option is
     required to be set when debugging is necessary.
     <!--l. 3152--><p class="noindent" >The following logging targets are supported:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x01 </tspan>(bit <tspan class="ec-lmtt-10">0</tspan>) — Enable logging, otherwise all log is discarded.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x02 </tspan>(bit <tspan class="ec-lmtt-10">1</tspan>) — Enable basic console (onscreen) logging.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x04 </tspan>(bit <tspan class="ec-lmtt-10">2</tspan>) — Enable logging to Data Hub.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x08 </tspan>(bit <tspan class="ec-lmtt-10">3</tspan>) — Enable serial port logging.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x10 </tspan>(bit <tspan class="ec-lmtt-10">4</tspan>) — Enable UEFI variable logging.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x20 </tspan>(bit <tspan class="ec-lmtt-10">5</tspan>) — Enable non-volatile UEFI variable logging.
         </li>
                                                                                                  
                                                                                                  
         <li class="itemize"><tspan class="ec-lmtt-10">0x40 </tspan>(bit <tspan class="ec-lmtt-10">6</tspan>) — Enable logging to file.</li></ul>
     <!--l. 3165--><p class="noindent" >Console logging prints less than all the other variants. Depending on the build type (<tspan class="ec-lmtt-10">RELEASE</tspan>, <tspan class="ec-lmtt-10">DEBUG</tspan>, or <tspan class="ec-lmtt-10">NOOPT</tspan>) different
     amount of logging may be read (from least to most).
     </p><!--l. 3169--><p class="noindent" >Data Hub log will not log kernel and kext patches. To obtain Data Hub log use the following command in macOS:
     </p><!--l. 3171-->
<a 
 id="x1-440178"></a>
     <div class="lstlisting" id="listing-6"><span class="label"><a 
 id="x1-44019r1"></a></span><tspan class="ec-lmtk-10">ioreg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">lw0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">IODeviceTree</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">grep</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">boot</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">log</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">sort</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">sed</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">s</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">&#x003C;\(.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">\)&#x003E;.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">/\1/</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">xxd</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">r</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan>
     
     </div>
     <!--l. 3175--><p class="noindent" >UEFI variable log does not include some messages and has no performance data. For safety reasons log size is limited to
     32 kilobytes. Some firmwares may truncate it much earlier or drop completely if they have no memory. Using non-volatile
     flag will write the log to NVRAM flash after every printed line. To obtain UEFI variable log use the following command
     in macOS: </p><!--l. 3180-->
     <div class="lstlisting" id="listing-7"><span class="label"><a 
 id="x1-44020r1"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">boot</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">log</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-44021r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">awk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">{</tspan><tspan class="ec-lmtt-10">gsub</tspan><tspan class="ec-lmtt-10">(/%0</tspan><tspan class="ec-lmtt-10">d</tspan><tspan class="ec-lmtt-10">%0</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10">%00/,</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">);</tspan><tspan class="ec-lmtt-10">gsub</tspan><tspan class="ec-lmtt-10">(/%0</tspan><tspan class="ec-lmtt-10">d</tspan><tspan class="ec-lmtt-10">%0</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10">/,</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">\</tspan><tspan class="ec-lmtt-10">n</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">)}1</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan>
     
     </div>
     <!--l. 3185--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: Some firmwares are reported to have broken NVRAM garbage collection. This means that they may not be
     able to always free space after variable deletion. Do not use non-volatile NVRAM logging without extra need on such
     devices.
     </p><!--l. 3189--><p class="noindent" >While OpenCore boot log already contains basic version information with build type and date, this data may also be
     found in NVRAM in <tspan class="ec-lmtt-10">opencore-version </tspan>variable even with boot log disabled.
     </p><!--l. 3193--><p class="noindent" >File logging will create a file named <tspan class="ec-lmtt-10">opencore-YYYY-MM-DD-HHMMSS.txt </tspan>at EFI volume root with log contents (the upper
     case letter sequence is replaced with date and time from the firmware). Please be warned that some file system
     drivers present in firmwares are not reliable, and may corrupt data when writing files through UEFI. Log is
     attempted to be written in the safest manner, and thus is very slow. Ensure that <tspan class="ec-lmtt-10">DisableWatchDog </tspan>is
     set to <tspan class="ec-lmtt-10">true </tspan>when a slow drive is used. Try to avoid frequent use of this option when dealing with flash
     drives as large I/O amounts may speedup memory wear and render this flash drive unusable in shorter
     time.
     </p><!--l. 3202--><p class="noindent" >When interpreting the log, note that the lines are prefixed with a tag describing the relevant location (module) of the log
     line allowing better attribution of the line to the functionality. The list of currently used tags is provided
     below.
     </p><!--l. 3206--><p class="noindent" ><tspan class="ec-lmbx-10">Drivers and tools</tspan>: </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">BMF </tspan>— OpenCanopy, bitmap font
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BS </tspan>— Bootstrap
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">GSTT </tspan>— GoptStop
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">HDA </tspan>— AudioDxe
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">KKT </tspan>— KeyTester
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">MMDD </tspan>— MmapDump
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCPAVP </tspan>— PavpProvision
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCRST </tspan>— ResetSystem
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCUI </tspan>— OpenCanopy
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC </tspan>— OpenCore main
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">VMOPT </tspan>— VerifyMemOpt</li></ul>
     <!--l. 3222--><p class="noindent" ><tspan class="ec-lmbx-10">Libraries</tspan>: </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">AAPL </tspan>— OcDebugLogLib, Apple EfiBoot logging
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCABC </tspan>— OcAfterBootCompatLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCAE </tspan>— OcAppleEventLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCAK </tspan>— OcAppleKernelLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCAU </tspan>— OcAudioLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCAV </tspan>— OcAppleImageVerificationLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCA </tspan>—- OcAcpiLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCBP </tspan>— OcAppleBootPolicyLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCB </tspan>— OcBootManagementLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCCL </tspan>— OcAppleChunkListLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCCPU </tspan>— OcCpuLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCC </tspan>— OcConsoleLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCDC </tspan>— OcDriverConnectionLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCDH </tspan>— OcDataHubLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCDI </tspan>— OcAppleDiskImageLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCFS </tspan>— OcFileLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCFV </tspan>— OcFirmwareVolumeLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCHS </tspan>— OcHashServicesLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCI4 </tspan>— OcAppleImg4Lib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCIC </tspan>— OcImageConversionLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCII </tspan>— OcInputLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCJS </tspan>— OcApfsLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCKM </tspan>— OcAppleKeyMapLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCL </tspan>— OcDebugLogLib
         </li>
                                                                                                  
                                                                                                  
         <li class="itemize"><tspan class="ec-lmtt-10">OCMCO </tspan>— OcMachoLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCME </tspan>— OcHeciLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCMM </tspan>— OcMemoryLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCPI </tspan>— OcFileLib, partition info
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCPNG </tspan>— OcPngLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCRAM </tspan>— OcAppleRamDiskLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCRTC </tspan>— OcRtcLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCSB </tspan>— OcAppleSecureBootLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCSMB </tspan>— OcSmbiosLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCSMC </tspan>— OcSmcLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCST </tspan>— OcStorageLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCS </tspan>— OcSerializedLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCTPL </tspan>— OcTemplateLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCUC </tspan>— OcUnicodeCollationLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCUT </tspan>— OcAppleUserInterfaceThemeLib
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OCXML </tspan>— OcXmlLib</li></ul>
     </li></ol>
<a 
 id="x1-44022r47"></a>
<h4 class="subsectionHead"><span class="titlemark">8.5   </span> <a 
 id="x1-450005"></a>Security Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-45002x1"><tspan class="ec-lmtt-10">AllowNvramReset</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Allow <tspan class="ec-lmtt-10">CMD+OPT+P+R </tspan>handling and enable showing <tspan class="ec-lmtt-10">NVRAM Reset </tspan>entry in boot picker.
     <!--l. 3280--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: It is known that some Lenovo laptops have a firmware bug, which makes them unbootable after performing
     NVRAM reset. See <a 
href="https://github.com/acidanthera/bugtracker/issues/995" >acidanthera/bugtracker#995</a> for more details.
     </p><!--l. 3285--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: Resetting NVRAM will also erase all the boot options otherwise not backed up with bless (e.g. Linux).
     </p></li>
     <li 
  class="enumerate" id="x1-45004x2"><tspan class="ec-lmtt-10">AllowSetDefault</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Allow <tspan class="ec-lmtt-10">CTRL+Enter </tspan>and <tspan class="ec-lmtt-10">CTRL+Index </tspan>handling to set the default boot option in boot picker.
     </li>
     <li 
  class="enumerate" id="x1-45006x3"><tspan class="ec-lmtt-10">ApECID</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apple Enclave Identifier.
     <!--l. 3301--><p class="noindent" >Setting this value to any non-zero 64-bit integer will allow using personalised Apple Secure Boot identifiers.
                                                                                                  
                                                                                                  
     To use this setting, make sure to generate a random 64-bit number with a cryptographically secure random
     number generator. With this value set and <tspan class="ec-lmtt-10">SecureBootModel </tspan>valid and not <tspan class="ec-lmtt-10">Disabled </tspan>it is possible to achieve
     <a 
href="https://support.apple.com/en-us/HT208330" ><tspan class="ec-lmtt-10">Full Security</tspan></a> of Apple Secure Boot.
     </p><!--l. 3309--><p class="noindent" >To start using personalised Apple Secure Boot, the operating system will have to be reinstalled or personalised.
     Unless the operating system is personalised, macOS DMG recovery cannot be loaded. If DMG recovery is missing,
     it can be downloaded with <tspan class="ec-lmtt-10">macrecovery </tspan>utility and put to <tspan class="ec-lmtt-10">com.apple.recovery.boot </tspan>as explained in <a 
href="#x1-830095">Tips and
     Tricks</a> section. Note that <a 
href="#x1-450186">DMG loading</a> needs to be set to <tspan class="ec-lmtt-10">Signed </tspan>to use any DMG with Apple Secure Boot.
     </p><!--l. 3318--><p class="noindent" >To personalise an existing operating system use <tspan class="ec-lmtt-10">bless </tspan>command after loading to macOS DMG recovery. Mount
     the system volume partition, unless it has already been mounted, and execute the following command:
</p>
     <!--l. 3322-->
<a 
 id="x1-450053"></a>
     <div class="lstlisting" id="listing-8"><span class="label"><a 
 id="x1-45007r1"></a></span><tspan class="ec-lmtt-10">bless</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">bless</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">folder</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Volumes</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Macintosh</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">HD</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">System</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Library</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">CoreServices</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45008r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">boote</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">personalize</tspan>
     
     </div>
     <!--l. 3327--><p class="noindent" >When reinstalling the operating system, note that current versions of macOS Installer, tested as of 10.15.6,
     will usually run out of free memory on the <tspan class="ec-lmtt-10">/var/tmp </tspan>partition when trying to install macOS with the
     personalised Apple Secure Boot. Soon after downloading the macOS installer image an <tspan class="ec-lmtt-10">Unable to verify</tspan>
     <tspan class="ec-lmtt-10">macOS </tspan>error message will appear. To workaround this issue allocate a dedicated RAM disk of 2 MBs for
     macOS personalisation by entering the following commands in macOS recovery terminal before starting the
     installation:
</p>
     <!--l. 3336-->
     <div class="lstlisting" id="listing-9"><span class="label"><a 
 id="x1-45009r1"></a></span><tspan class="ec-lmtt-10">disk</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">$</tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">attach</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">nomount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ram</tspan><tspan class="ec-lmtt-10">://4096)</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45010r2"></a></span><tspan class="ec-lmtk-10">diskutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">erasevolume</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">HFS</tspan><tspan class="ec-lmtt-10">+</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">SecureBoot</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">$disk</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45011r3"></a></span><tspan class="ec-lmtk-10">diskutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">unmount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">$disk</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45012r4"></a></span><tspan class="ec-lmtt-10">mkdir</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">var</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OSPersonalizationTemp</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45013r5"></a></span><tspan class="ec-lmtk-10">diskutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">mount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">mountpoint</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">var</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">tmp</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OSPersonalizationTemp</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">$disk</tspan>
     
     </div>
     </li>
     <li 
  class="enumerate" id="x1-45015x4"><tspan class="ec-lmtt-10">AuthRestart</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable <tspan class="ec-lmtt-10">VirtualSMC</tspan>-compatible authenticated restart.
     <!--l. 3350--><p class="noindent" >Authenticated restart is a way to reboot FileVault 2 enabled macOS without entering the password. A dedicated terminal
     command can be used to perform authenticated restarts: <tspan class="ec-lmtt-10">sudo fdesetup authrestart</tspan>. It is also used when installing
     operating system updates.
     </p><!--l. 3354--><p class="noindent" >VirtualSMC performs authenticated restart by saving disk encryption key split in NVRAM and RTC,
     which despite being removed as soon as OpenCore starts, may be considered a security risk and thus is
     optional.
     </p></li>
     <li 
  class="enumerate" id="x1-45017x5"><tspan class="ec-lmtt-10">BootProtect</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">None</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Attempt to provide bootloader persistence.
     <!--l. 3364--><p class="noindent" >Valid values:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">None </tspan>— do nothing.
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Bootstrap </tspan>— create or update top-priority <tspan class="ec-lmtt-10">\EFI\OC\Bootstrap\Bootstrap.efi </tspan>boot option (<tspan class="ec-lmtt-10">Boot9696</tspan>)
         in UEFI variable storage at bootloader startup. For this option to work <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>is required
         to be enabled.</li></ul>
     <!--l. 3375--><p class="noindent" >This option provides integration with third-party operating system installation and upgrade at the times they overwrite
     <tspan class="ec-lmtt-10">\EFI\BOOT\BOOTx64.efi </tspan>file. By creating a custom option in <tspan class="ec-lmtt-10">Bootstrap </tspan>mode this file path becomes no longer used for
     bootstrapping OpenCore.
     </p><!--l. 3380--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: Some firmwares may have broken NVRAM, no boot option support, or various other incompatibilities of any
     kind. While unlikely, the use of this option may even cause boot failure. This option should be used without any warranty
     exclusively on the boards known to be compatible.
     </p><!--l. 3384--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: Be warned that while NVRAM reset executed from OpenCore should not erase the boot option created in
     <tspan class="ec-lmtt-10">Bootstrap</tspan>, executing NVRAM reset prior to loading OpenCore will remove it.
     </p></li>
     <li 
  class="enumerate" id="x1-45019x6"><a 
 id="x1-450186"></a> <tspan class="ec-lmtt-10">DmgLoading</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Signed</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Define Disk Image (DMG) loading policy used for macOS Recovery.
     <!--l. 3393--><p class="noindent" >Valid values:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Disabled </tspan>— loading DMG images will fail. <tspan class="ec-lmtt-10">Disabled </tspan>policy will still let macOS Recovery to load in most
         cases as there usually are <tspan class="ec-lmtt-10">boot.efi </tspan>files compatible with Apple Secure Boot. Manually downloaded DMG
         images stored in <tspan class="ec-lmtt-10">com.apple.recovery.boot </tspan>directories will not load, however.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Signed </tspan>— only Apple-signed DMG images will load. Due to Apple Secure Boot design <tspan class="ec-lmtt-10">Signed </tspan>policy will
         let any Apple-signed macOS Recovery to load regardless of Apple Secure Boot state, which may not always
         be desired.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Any </tspan>— any DMG images will mount as normal filesystems. <tspan class="ec-lmtt-10">Any </tspan>policy is strongly not recommended and
         will cause a boot failure when Apple Secure Boot is activated.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-45021x7"><tspan class="ec-lmtt-10">EnablePassword</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable password protection to allow sensitive operations.
     <!--l. 3417--><p class="noindent" >Password protection ensures that sensitive operations like booting a non-default operating system (e.g. macOS recovery
     or a tool), resetting NVRAM storage, trying to boot into a non-default mode (e.g. verbose mode or safe mode) are not
     allowed without explicit user authentication by a custom password. Currently password and salt are hashed with 5000000
     iterations of SHA-512.
     </p><!--l. 3423--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This functionality is currently in development and is not ready for daily usage.
     </p></li>
     <li 
  class="enumerate" id="x1-45023x8"><tspan class="ec-lmtt-10">ExposeSensitiveData</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0x6</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sensitive data exposure bitmask (sum) to operating system.
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x01 </tspan>— Expose printable booter path as an UEFI variable.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x02 </tspan>— Expose OpenCore version as an UEFI variable.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x04 </tspan>— Expose OpenCore version in boot picker menu title.
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x08 </tspan>— Expose OEM information as a set of UEFI variables.</li></ul>
     <!--l. 3440--><p class="noindent" >Exposed booter path points to OpenCore.efi or its booter depending on the load order. To obtain booter path use the
     following command in macOS: </p><!--l. 3442-->
<a 
 id="x1-450228"></a>
     <div class="lstlisting" id="listing-10"><span class="label"><a 
 id="x1-45024r1"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">boot</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">path</tspan>
     
     </div>
     <!--l. 3446--><p class="noindent" >To use booter path for mounting booter volume use the following command in macOS: </p><!--l. 3447-->
     <div class="lstlisting" id="listing-11"><span class="label"><a 
 id="x1-45025r1"></a></span><tspan class="ec-lmtt-10">u</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">$</tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">boot</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">path</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">sed</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">s</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">GPT</tspan><tspan class="ec-lmtt-10">,\([^,]</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">\),.</tspan><tspan class="ec-lmtt-10">*</tspan><tspan class="ec-lmtt-10">/\1/</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">);</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45026r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">if</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">[</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">$u</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">!=</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">];</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">then</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">sudo</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">diskutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">mount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">$u</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">fi</tspan>
     
     </div>
     <!--l. 3452--><p class="noindent" >To obtain OpenCore version use the following command in macOS: </p><!--l. 3453-->
     <div class="lstlisting" id="listing-12"><span class="label"><a 
 id="x1-45027r1"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">opencore</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">version</tspan>
     
     </div>
     <!--l. 3457--><p class="noindent" >To obtain OEM information use the following commands in macOS: </p><!--l. 3458-->
     <div class="lstlisting" id="listing-13"><span class="label"><a 
 id="x1-45028r1"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">oem</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">product</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtti-10">#</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">SMBIOS</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">Type1</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">ProductName</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45029r2"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">oem</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">vendor</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtti-10">#</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">SMBIOS</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">Type2</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">Manufacturer</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45030r3"></a></span><tspan class="ec-lmtk-10">nvram</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">D1FDA02</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">38</tspan><tspan class="ec-lmtt-10">C7</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">A6A</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">9</tspan><tspan class="ec-lmtt-10">CC6</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10">BCCA8B30102</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10">oem</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">board</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtti-10">#</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">SMBIOS</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">Type2</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">ProductName</tspan>
     
     </div>
     </li>
     <li 
  class="enumerate" id="x1-45032x9"><tspan class="ec-lmtt-10">HaltLevel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0x80000000 </tspan>(<tspan class="ec-lmtt-10">DEBUG_ERROR</tspan>)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: EDK II debug level bitmask (sum) causing CPU to halt (stop execution) after obtaining a message of
     <tspan class="ec-lmtt-10">HaltLevel</tspan>. Possible values match <tspan class="ec-lmtt-10">DisplayLevel </tspan>values.
     </li>
     <li 
  class="enumerate" id="x1-45034x10"><tspan class="ec-lmtt-10">PasswordHash</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data </tspan>64 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: all zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Password hash used when <tspan class="ec-lmtt-10">EnabledPassword </tspan>is set.
     </li>
     <li 
  class="enumerate" id="x1-45036x11"><tspan class="ec-lmtt-10">PasswordSalt</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: empty<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Password salt used when <tspan class="ec-lmtt-10">EnabledPassword </tspan>is set.
     </li>
     <li 
  class="enumerate" id="x1-45038x12"><a 
 id="x1-4503712"></a> <tspan class="ec-lmtt-10">Vault</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Secure</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enables vaulting mechanism in OpenCore.
     <!--l. 3490--><p class="noindent" >Valid values:
</p>
                                                                                                  
                                                                                                  
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Optional </tspan>— require nothing, no vault is enforced, insecure.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Basic </tspan>— require <tspan class="ec-lmtt-10">vault.plist </tspan>file present in <tspan class="ec-lmtt-10">OC </tspan>directory. This provides basic filesystem integrity verification
         and may protect from unintentional filesystem corruption.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Secure </tspan>— require <tspan class="ec-lmtt-10">vault.sig </tspan>signature file for <tspan class="ec-lmtt-10">vault.plist </tspan>in <tspan class="ec-lmtt-10">OC </tspan>directory. This includes <tspan class="ec-lmtt-10">Basic </tspan>integrity
         checking but also attempts to build a trusted bootchain.</li></ul>
     <!--l. 3503--><p class="noindent" ><tspan class="ec-lmtt-10">vault.plist </tspan>file should contain SHA-256 hashes for all files used by OpenCore. Presence of this file is highly
     recommended to ensure that unintentional file modifications (including filesystem corruption) do not happen unnoticed.
     To create this file automatically use <a 
href="https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/CreateVault" ><tspan class="ec-lmtt-10">create_vault.sh</tspan></a> script. Regardless of the underlying filesystem, path name and
     case must match between <tspan class="ec-lmtt-10">config.plist </tspan>and <tspan class="ec-lmtt-10">vault.plist</tspan>.
     </p><!--l. 3511--><p class="noindent" ><tspan class="ec-lmtt-10">vault.sig </tspan>file should contain a raw 256 byte RSA-2048 signature from SHA-256 hash of <tspan class="ec-lmtt-10">vault.plist</tspan>. The signature is
     verified against the public key embedded into <tspan class="ec-lmtt-10">OpenCore.efi</tspan>. To embed the public key either of the following should be
     performed:
</p>
         <ul class="itemize1">
         <li class="itemize">Provide public key during the <tspan class="ec-lmtt-10">OpenCore.efi </tspan>compilation in <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Platform/OpenCore/OpenCoreVault.c" ><tspan class="ec-lmtt-10">OpenCoreVault.c</tspan></a> file.
         </li>
         <li class="itemize">Binary patch <tspan class="ec-lmtt-10">OpenCore.efi </tspan>replacing zeroes with the public key between <tspan class="ec-lmtt-10">=BEGIN OC VAULT= </tspan>and <tspan class="ec-lmtt-10">==END</tspan>
         <tspan class="ec-lmtt-10">OC VAULT== </tspan>ASCII markers.</li></ul>
     <!--l. 3523--><p class="noindent" >RSA public key 520 byte format description can be found in Chromium OS documentation. To convert public key from
     X.509 certificate or from PEM file use <a 
href="https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/CreateVault" >RsaTool</a>.
     </p><!--l. 3528--><p class="noindent" >The complete set of commands to:
</p>
         <ul class="itemize1">
         <li class="itemize">Create <tspan class="ec-lmtt-10">vault.plist</tspan>.
         </li>
         <li class="itemize">Create a new RSA key (always do this to avoid loading old configuration).
         </li>
         <li class="itemize">Embed RSA key into <tspan class="ec-lmtt-10">OpenCore.efi</tspan>.
         </li>
         <li class="itemize">Create <tspan class="ec-lmtt-10">vault.sig</tspan>.</li></ul>
     <!--l. 3538--><p class="noindent" >Can look as follows: </p><!--l. 3539-->
     <div class="lstlisting" id="listing-14"><span class="label"><a 
 id="x1-45039r1"></a></span><tspan class="ec-lmtk-10">cd</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Volumes</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">EFI</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">EFI</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OC</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45040r2"></a></span><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">path</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">create_vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">sh</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45041r3"></a></span><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">path</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">RsaTool</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">sign</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">sig</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">pub</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45042r4"></a></span><tspan class="ec-lmtt-10">off</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">$</tspan><tspan class="ec-lmtt-10">((</tspan><tspan class="ec-lmtt-10">$</tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtk-10">strings</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">t</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">d</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OpenCore</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">e</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">grep</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">BEGIN</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OC</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">VAULT</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">&#x0022;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">|</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">cut</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">f1</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">d</tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ts1-lmtt10-">&#x0027;</tspan><tspan class="ec-lmtt-10">)+16))</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45043r5"></a></span><tspan class="ec-lmtk-10">dd</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">of</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">OpenCore</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">e</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">if</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">pub</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">bs</tspan><tspan class="ec-lmtt-10">=1</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">seek</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">$off</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">count</tspan><tspan class="ec-lmtt-10">=528</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">conv</tspan><tspan class="ec-lmtt-10">=</tspan><tspan class="ec-lmtt-10">notrunc</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-45044r6"></a></span><tspan class="ec-lmtt-10">rm</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">vault</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">pub</tspan>
     
     </div>
     <!--l. 3548--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: While it may appear obvious, an external method is required to verify <tspan class="ec-lmtt-10">OpenCore.efi </tspan>and <tspan class="ec-lmtt-10">BOOTx64.efi </tspan>for
     secure boot path. For this, it is recommended to enable UEFI SecureBoot using a custom certificate and to sign
     <tspan class="ec-lmtt-10">OpenCore.efi </tspan>and <tspan class="ec-lmtt-10">BOOTx64.efi </tspan>with a custom key. More details on customising secure boot on modern firmwares can
     be found in <a 
href="https://habr.com/post/273497/" >Taming UEFI SecureBoot</a> paper (in Russian).
     </p><!--l. 3556--><p class="noindent" ><tspan class="ec-lmri-10">Note 2</tspan>: <tspan class="ec-lmtt-10">vault.plist </tspan>and <tspan class="ec-lmtt-10">vault.sig </tspan>are used regardless of this option when <tspan class="ec-lmtt-10">vault.plist </tspan>is present or public key is
     embedded into <tspan class="ec-lmtt-10">OpenCore.efi</tspan>. Setting this option will only ensure configuration sanity, and abort the boot process
     otherwise.
     </p></li>
     <li 
  class="enumerate" id="x1-45046x13"><tspan class="ec-lmtt-10">ScanPolicy</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 32 bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0x10F0103</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Define operating system detection policy.
     <!--l. 3567--><p class="noindent" >This value allows to prevent scanning (and booting) from untrusted source based on a bitmask (sum) of select flags. As it
     is not possible to reliably detect every file system or device type, this feature cannot be fully relied upon in open
                                                                                                  
                                                                                                  
     environments, and the additional measures are to be applied.
     </p><!--l. 3573--><p class="noindent" >Third party drivers may introduce additional security (and performance) measures following the provided scan policy.
     Scan policy is exposed in <tspan class="ec-lmtt-10">scan-policy </tspan>variable of <tspan class="ec-lmtt-10">4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 </tspan>GUID for UEFI Boot
     Services only.
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000001 </tspan>(bit <tspan class="ec-lmtt-10">0</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_FILE_SYSTEM_LOCK</tspan>, restricts scanning to only known file systems defined
         as a part of this policy. File system drivers may not be aware of this policy, and to avoid mounting of
         undesired file systems it is best not to load its driver. This bit does not affect dmg mounting, which may
         have any file system. Known file systems are prefixed with <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000002 </tspan>(bit <tspan class="ec-lmtt-10">1</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_DEVICE_LOCK</tspan>, restricts scanning to only known device types defined as
         a part of this policy. This is not always possible to detect protocol tunneling, so be aware that on some
         systems it may be possible for e.g. USB HDDs to be recognised as SATA. Cases like this must be reported.
         Known device types are prefixed with <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000100 </tspan>(bit <tspan class="ec-lmtt-10">8</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_APFS</tspan>, allows scanning of APFS file system.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000200 </tspan>(bit <tspan class="ec-lmtt-10">9</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_HFS</tspan>, allows scanning of HFS file system.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000400 </tspan>(bit <tspan class="ec-lmtt-10">10</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_ESP</tspan>, allows scanning of EFI System Partition file system.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000800 </tspan>(bit <tspan class="ec-lmtt-10">11</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_NTFS</tspan>, allows scanning of NTFS (Msft Basic Data) file system.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00001000 </tspan>(bit <tspan class="ec-lmtt-10">12</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_EXT</tspan>, allows scanning of EXT (Linux Root) file system.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00010000 </tspan>(bit <tspan class="ec-lmtt-10">16</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SATA</tspan>, allow scanning SATA devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00020000 </tspan>(bit <tspan class="ec-lmtt-10">17</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SASEX</tspan>, allow scanning SAS and Mac NVMe devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00040000 </tspan>(bit <tspan class="ec-lmtt-10">18</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SCSI</tspan>, allow scanning SCSI devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00080000 </tspan>(bit <tspan class="ec-lmtt-10">19</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_NVME</tspan>, allow scanning NVMe devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00100000 </tspan>(bit <tspan class="ec-lmtt-10">20</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_ATAPI</tspan>, allow scanning CD/DVD devices and old SATA.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00200000 </tspan>(bit <tspan class="ec-lmtt-10">21</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_USB</tspan>, allow scanning USB devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00400000 </tspan>(bit <tspan class="ec-lmtt-10">22</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_FIREWIRE</tspan>, allow scanning FireWire devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00800000 </tspan>(bit <tspan class="ec-lmtt-10">23</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SDCARD</tspan>, allow scanning card reader devices.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x01000000 </tspan>(bit <tspan class="ec-lmtt-10">24</tspan>) — <tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_PCI</tspan>, allow scanning devices directly connected to PCI bus
         (e.g. VIRTIO).</li></ul>
     <!--l. 3621--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Given the above description, <tspan class="ec-lmtt-10">0xF0103 </tspan>value is expected to allow scanning of SATA, SAS, SCSI, and NVMe
     devices with APFS file system, and prevent scanning of any devices with HFS or FAT32 file systems in
     addition to not scanning APFS file systems on USB, CD, and FireWire drives. The combination reads as:
     </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_FILE_SYSTEM_LOCK</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_DEVICE_LOCK</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_ALLOW_FS_APFS</tspan>
         </li>
                                                                                                  
                                                                                                  
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SATA</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SASEX</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_SCSI</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">OC_SCAN_ALLOW_DEVICE_NVME</tspan></li></ul>
     </li>
     <li 
  class="enumerate" id="x1-45048x14"><a 
 id="x1-4504714"></a> <tspan class="ec-lmtt-10">SecureBootModel</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Default</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apple Secure Boot hardware model.
     <!--l. 3642--><p class="noindent" >Sets Apple Secure Boot hardware model and policy. Specifying this value defines which operating systems
     will be bootable. Operating systems shipped before the specified model was released will not boot. Valid
     values:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Default </tspan>— Recent available model, currently set to <tspan class="ec-lmtt-10">j137</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Disabled </tspan>— No model, Secure Boot will be disabled.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j137 </tspan>— <tspan class="ec-lmtt-10">iMacPro1,1 (December 2017) minimum macOS 10.13.2 (17C2111)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j680 </tspan>— <tspan class="ec-lmtt-10">MacBookPro15,1 (July 2018) minimum macOS 10.13.6 (17G2112)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j132 </tspan>— <tspan class="ec-lmtt-10">MacBookPro15,2 (July 2018) minimum macOS 10.13.6 (17G2112)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j174 </tspan>— <tspan class="ec-lmtt-10">Macmini8,1 (October 2018) minimum macOS 10.14 (18A2063)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j140k </tspan>— <tspan class="ec-lmtt-10">MacBookAir8,1 (October 2018) minimum macOS 10.14.1 (18B2084)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j780 </tspan>— <tspan class="ec-lmtt-10">MacBookPro15,3 (May 2019) minimum macOS 10.14.5 (18F132)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j213 </tspan>— <tspan class="ec-lmtt-10">MacBookPro15,4 (July 2019) minimum macOS 10.14.5 (18F2058)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j140a </tspan>— <tspan class="ec-lmtt-10">MacBookAir8,2 (July 2019) minimum macOS 10.14.5 (18F2058)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j152f </tspan>— <tspan class="ec-lmtt-10">MacBookPro16,1 (November 2019) minimum macOS 10.15.1 (19B2093)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j160 </tspan>— <tspan class="ec-lmtt-10">MacPro7,1 (December 2019) minimum macOS 10.15.1 (19B88)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j230k </tspan>— <tspan class="ec-lmtt-10">MacBookAir9,1 (March 2020) minimum macOS 10.15.3 (19D2064)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j214k </tspan>— <tspan class="ec-lmtt-10">MacBookPro16,2 (May 2020) minimum macOS 10.15.4 (19E2269)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j223 </tspan>— <tspan class="ec-lmtt-10">MacBookPro16,3 (May 2020) minimum macOS 10.15.4 (19E2265)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j215 </tspan>— <tspan class="ec-lmtt-10">MacBookPro16,4 (June 2020) minimum macOS 10.15.5 (19F96)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j185 </tspan>— <tspan class="ec-lmtt-10">iMac20,1 (August 2020) minimum macOS 10.15.6 (19G2005)</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">j185f </tspan>— <tspan class="ec-lmtt-10">iMac20,2 (August 2020) minimum macOS 10.15.6 (19G2005)</tspan></li></ul>
     <!--l. 3669--><p class="noindent" ><tspan class="ec-lmtt-10">PlatformInfo </tspan>and <tspan class="ec-lmtt-10">SecureBootModel </tspan>are independent, allowing to enabling Apple Secure Boot with any SMBIOS.
     Setting <tspan class="ec-lmtt-10">SecureBootModel </tspan>to any valid value but <tspan class="ec-lmtt-10">Disabled </tspan>is equivalent to <a 
href="https://support.apple.com/en-us/HT208330" ><tspan class="ec-lmtt-10">Medium Security</tspan></a> of Apple Secure Boot. The
     <tspan class="ec-lmtt-10">ApECID </tspan>value must also be specified to achieve <tspan class="ec-lmtt-10">Full Security</tspan>.
                                                                                                  
                                                                                                  
     </p><!--l. 3676--><p class="noindent" >Enabling Apple Secure Boot is more demanding to incorrect configurations, buggy macOS installations, and unsupported
     setups. Things to consider:
         </p><ol  class="enumerate2" >
         <li 
  class="enumerate" id="x1-45050x1">As with T2 Macs, unsigned kernel drivers and several signed kernel drivers, including NVIDIA Web Drivers,
         cannot be installed.
         </li>
         <li 
  class="enumerate" id="x1-45052x2">The list of cached drivers may be different, resulting in the need to change the list of <tspan class="ec-lmtt-10">Added </tspan>or <tspan class="ec-lmtt-10">Forced</tspan>
         kernel drivers. For example, <tspan class="ec-lmtt-10">IO80211Family </tspan>cannot be injected in this case.
         </li>
         <li 
  class="enumerate" id="x1-45054x3">System volume alterations on operating systems with sealing, like macOS 11, may result in the operating
         system being unbootable. Do not try to disable system volume encryption unless Apple Secure Boot is
         disabled.
         </li>
         <li 
  class="enumerate" id="x1-45056x4">If the platform requires certain settings, but they were not enabled, because the obvious issues did not
         trigger before, boot failure might occur. Be extra careful with <tspan class="ec-lmtt-10">IgnoreInvalidFlexRatio </tspan>or <tspan class="ec-lmtt-10">HashServices</tspan>.
         </li>
         <li 
  class="enumerate" id="x1-45058x5">Operating systems released before Apple Secure Boot landed (e.g. macOS 10.12 or earlier) will still boot
         until UEFI Secure Boot is enabled. This is so, because from Apple Secure Boot point they are treated as
         incompatible and are assumed to be handled by the firmware just like Microsoft Windows is.
         </li>
         <li 
  class="enumerate" id="x1-45060x6">On older CPUs (e.g. before Sandy Bridge) enabling Apple Secure Boot might cause slightly slower loading
         by up to 1 second.
         </li>
         <li 
  class="enumerate" id="x1-45062x7">Since <tspan class="ec-lmtt-10">Default </tspan>value will increase with time to support the latest major release operating system, it is not
         recommended to use <tspan class="ec-lmtt-10">ApECID </tspan>and <tspan class="ec-lmtt-10">Default </tspan>value together.</li></ol>
     <!--l. 3703--><p class="noindent" >Sometimes the already installed operating system may have outdated Apple Secure Boot manifests on the
     <tspan class="ec-lmtt-10">Preboot </tspan>partition causing boot failure. If there is “OCB: Apple Secure Boot prohibits this boot entry,
     enforcing!” message, it is likely the case. When this happens, either reinstall the operating system or copy the
     manifests (files with <tspan class="ec-lmtt-10">.im4m </tspan>extension, such as <tspan class="ec-lmtt-10">boot.efi.j137.im4m</tspan>) from <tspan class="ec-lmtt-10">/usr/standalone/i386 </tspan>to
     <tspan class="ec-lmtt-10">/Volumes/Preboot/&#x003C;UUID&#x003E;/System/Library/CoreServices</tspan>. Here <tspan class="ec-lmtt-10">&#x003C;UUID&#x003E; </tspan>is the system volume identifier. On
     HFS+ installations the manifests should be copied to <tspan class="ec-lmtt-10">/System/Library/CoreServices </tspan>on the system
     volume.
     </p><!--l. 3713--><p class="noindent" >For more details on how to configure Apple Secure Boot with UEFI Secure Boot refer to <a 
href="#x1-800002">UEFI Secure Boot</a>
     section.
</p>
     </li></ol>
<a 
 id="x1-45063r48"></a>
<h4 class="subsectionHead"><span class="titlemark">8.6   </span> <a 
 id="x1-460006"></a>Entry Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-46002x1"><tspan class="ec-lmtt-10">Arguments</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used as boot arguments (load options) of the specified entry.
     </li>
     <li 
  class="enumerate" id="x1-46004x2"><tspan class="ec-lmtt-10">Auxiliary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This entry will not be listed by default when <tspan class="ec-lmtt-10">HideAuxiliary </tspan>is set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-46006x3"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
                                                                                                  
                                                                                                  
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-46008x4"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This entry will not be listed unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-46010x5"><tspan class="ec-lmtt-10">Name</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Human readable entry name displayed in boot picker.
     </li>
     <li 
  class="enumerate" id="x1-46012x6"><tspan class="ec-lmtt-10">Path</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Entry location depending on entry type.
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Entries </tspan>specify external boot options, and therefore take device paths in <tspan class="ec-lmtt-10">Path </tspan>key. These values are not
         checked, thus be extremely careful. Example: <tspan class="ec-lmtt-10">PciRoot(0x0)/Pci(0x1,0x1)/.../\EFI\COOL.EFI</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Tools </tspan>specify internal boot options, which are part of bootloader vault, and therefore take file paths relative
         to <tspan class="ec-lmtt-10">OC/Tools </tspan>directory. Example: <tspan class="ec-lmtt-10">OpenShell.efi</tspan>.</li></ul>
     </li></ol>
<a 
 id="x1-46013r43"></a>
<h3 class="sectionHead"><span class="titlemark">9   </span> <a 
 id="x1-470009"></a>NVRAM</h3>
<a 
 id="x1-47001r49"></a>
<h4 class="subsectionHead"><span class="titlemark">9.1   </span> <a 
 id="x1-480001"></a>Introduction</h4>
<!--l. 3779--><p class="noindent" >Has <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>type and allows to set volatile UEFI variables commonly referred as NVRAM variables. Refer to <tspan class="ec-lmtt-10">man</tspan><tspan class="ec-lmtt-10"> nvram</tspan>
for more details. macOS extensively uses NVRAM variables for OS — Bootloader — Firmware intercommunication, and thus
supplying several NVRAM is required for proper macOS functioning.
</p><!--l. 3785--><p class="noindent" >Each NVRAM variable consists of its name, value, attributes (refer to UEFI specification), and its <a 
href="https://en.wikipedia.org/wiki/Universally_unique_identifier" >GUID</a>, representing which
‘section’ NVRAM variable belongs to. macOS uses several GUIDs, including but not limited to:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14 </tspan>(<tspan class="ec-lmtt-10">APPLE_VENDOR_VARIABLE_GUID</tspan>)
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82 </tspan>(<tspan class="ec-lmtt-10">APPLE_BOOT_VARIABLE_GUID</tspan>)
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">8BE4DF61-93CA-11D2-AA0D-00E098032B8C </tspan>(<tspan class="ec-lmtt-10">EFI_GLOBAL_VARIABLE_GUID</tspan>)
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102 </tspan>(<tspan class="ec-lmtt-10">OC_VENDOR_VARIABLE_GUID</tspan>)</li></ul>
<!--l. 3807--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some of the variables may be added by <a 
href="#x1-570004">PlatformNVRAM</a> or <a 
href="#x1-550002">Generic</a> subsections of <a 
href="#x1-5300010">PlatformInfo</a> section. Please ensure
that variables of this section never collide with them, as behaviour is undefined otherwise.
</p><!--l. 3814--><p class="noindent" >For proper macOS functioning it is often required to use <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol implementation currently offered as a
part of <tspan class="ec-lmtt-10">OpenRuntime </tspan>driver. While it brings any benefits, there are certain limitations which arise depending on the
use.
     </p><ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-48002x1">Not all tools may be aware of protected namespaces.<br 
class="newline" />When <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>is used <tspan class="ec-lmtt-10">Boot</tspan>-prefixed variable access is restricted and protected in a separate
     namespace. To access the original variables tools have to be aware of <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>logic.</li></ol>
<a 
 id="x1-48003r51"></a>
                                                                                                  
                                                                                                  
<h4 class="subsectionHead"><span class="titlemark">9.2   </span> <a 
 id="x1-490002"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-49002x1"><tspan class="ec-lmtt-10">Add</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets NVRAM variables from a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of GUIDs to a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of variable
     names and their values in <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> metadata </tspan>format. GUIDs must be provided in canonic string format in upper
     or lower case (e.g. <tspan class="ec-lmtt-10">8BE4DF61-93CA-11D2-AA0D-00E098032B8C</tspan>).
     <!--l. 3837--><p class="noindent" >Created variables get <tspan class="ec-lmtt-10">EFI_VARIABLE_BOOTSERVICE_ACCESS </tspan>and <tspan class="ec-lmtt-10">EFI_VARIABLE_RUNTIME_ACCESS </tspan>attributes set.
     Variables will only be set if not present or deleted. I.e. to overwrite an existing variable value add the variable
     name to the <tspan class="ec-lmtt-10">Delete </tspan>section. This approach enables to provide default values till the operating system takes the
     lead.
     </p><!--l. 3844--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: If <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> key </tspan>does not conform to GUID format, behaviour is undefined.
     </p></li>
     <li 
  class="enumerate" id="x1-49004x2"><tspan class="ec-lmtt-10">Delete</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Removes NVRAM variables from a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of GUIDs to an array (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan>) of
     variable names in <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string </tspan>format.
     </li>
     <li 
  class="enumerate" id="x1-49006x3"><tspan class="ec-lmtt-10">LegacyEnable</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enables loading of NVRAM variable file named <tspan class="ec-lmtt-10">nvram.plist </tspan>from EFI volume root.
     <!--l. 3861--><p class="noindent" >This file must have root <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary </tspan>type and contain two fields: </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Version </tspan>— <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, file version, must be set to 1.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Add </tspan>— <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary</tspan>, equivalent to <tspan class="ec-lmtt-10">Add </tspan>from <tspan class="ec-lmtt-10">config.plist</tspan>.</li></ul>
     <!--l. 3869--><p class="noindent" >Variable loading happens prior to <tspan class="ec-lmtt-10">Delete </tspan>(and <tspan class="ec-lmtt-10">Add</tspan>) phases. Unless <tspan class="ec-lmtt-10">LegacyOverwrite </tspan>is enabled, it will not overwrite any
     existing variable. Variables allowed to be set must be specified in <tspan class="ec-lmtt-10">LegacySchema</tspan>. Third-party scripts may be used to
     create <tspan class="ec-lmtt-10">nvram.plist </tspan>file. An example of such script can be found in <tspan class="ec-lmtt-10">Utilities</tspan>. The use of third-party scripts may
     require <tspan class="ec-lmtt-10">ExposeSensitiveData </tspan>set to <tspan class="ec-lmtt-10">0x3 </tspan>to provide <tspan class="ec-lmtt-10">boot-path </tspan>variable with OpenCore EFI partition
     UUID.
     </p><!--l. 3877--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: This feature is very dangerous as it passes unprotected data to firmware variable services. Use it only when no
     hardware NVRAM implementation is provided by the firmware or it is incompatible.
     </p></li>
     <li 
  class="enumerate" id="x1-49008x4"><tspan class="ec-lmtt-10">LegacyOverwrite</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Permits overwriting firmware variables from <tspan class="ec-lmtt-10">nvram.plist</tspan>.
     <!--l. 3887--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Only variables accessible from the operating system will be overwritten.
     </p></li>
     <li 
  class="enumerate" id="x1-49010x5"><tspan class="ec-lmtt-10">LegacySchema</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Allows setting select NVRAM variables from a map (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan>) of GUIDs to an array (<tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan>) of
     variable names in <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string </tspan>format.
     <!--l. 3896--><p class="noindent" ><tspan class="ec-lmtt-10">* </tspan>value can be used to accept all variables for select GUID.
     </p><!--l. 3898--><p class="noindent" ><tspan class="ec-lmbx-10">WARNING</tspan>: Choose variables very carefully, as nvram.plist is not vaulted. For instance, do not put <tspan class="ec-lmtt-10">boot-args </tspan>or
     <tspan class="ec-lmtt-10">csr-active-config</tspan>, as this can bypass SIP.
     </p></li>
     <li 
  class="enumerate" id="x1-49012x6"><tspan class="ec-lmtt-10">WriteFlash</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enables writing to flash memory for all added variables.
     <!--l. 3908--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This value is recommended to be enabled on most firmwares, but is left configurable for firmwares that may have
     issues with NVRAM variable storage garbage collection or alike.
</p>
     </li></ol>
<!--l. 3914--><p class="noindent" >To read NVRAM variable value from macOS, <tspan class="ec-lmtt-10">nvram </tspan>could be used by concatenating GUID and name variables separated by a
<tspan class="ec-lmtt-10">: </tspan>symbol. For example, <tspan class="ec-lmtt-10">nvram 7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-args</tspan>.
</p><!--l. 3918--><p class="noindent" >A continuously updated variable list can be found in a corresponding document: <a 
href="https://docs.google.com/spreadsheets/d/1HTCBwfOBkXsHiK7os3b2CUc6k68axdJYdGl-TyXqLu0" >NVRAM Variables</a>.
<a 
 id="x1-49013r52"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">9.3   </span> <a 
 id="x1-500003"></a>Mandatory Variables</h4>
<!--l. 3923--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: These variables may be added by <a 
href="#x1-570004">PlatformNVRAM</a> or <a 
href="#x1-550002">Generic</a> subsections of <a 
href="#x1-5300010">PlatformInfo</a> section. Using
<tspan class="ec-lmtt-10">PlatformInfo </tspan>is the recommend way of setting these variables.
</p><!--l. 3929--><p class="noindent" >The following variables are mandatory for macOS functioning:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeatures</tspan>
     32-bit <tspan class="ec-lmtt-10">FirmwareFeatures</tspan>. Present on all Macs to avoid extra parsing of SMBIOS tables
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeaturesMask</tspan>
     32-bit <tspan class="ec-lmtt-10">FirmwareFeaturesMask</tspan>. Present on all Macs to avoid extra parsing of SMBIOS tables.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB</tspan>
     <tspan class="ec-lmtt-10">BoardSerialNumber</tspan>. Present on newer Macs (2013+ at least) to avoid extra parsing of SMBIOS tables, especially
     in <tspan class="ec-lmtt-10">boot.efi</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM</tspan>
     Primary network adapter MAC address or replacement value. Present on newer Macs (2013+ at least) to avoid
     accessing special memory region, especially in <tspan class="ec-lmtt-10">boot.efi</tspan>.</li></ul>
<a 
 id="x1-50001r53"></a>
<h4 class="subsectionHead"><span class="titlemark">9.4   </span> <a 
 id="x1-510004"></a>Recommended Variables</h4>
<!--l. 3956--><p class="noindent" >The following variables are recommended for faster startup or other improvements:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:csr-active-config</tspan>
     32-bit System Integrity Protection bitmask. Declared in XNU source code in <a 
href="https://opensource.apple.com/source/xnu/xnu-4570.71.2/bsd/sys/csr.h.auto.html" >csr.h</a>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeatures</tspan>
     Combined <tspan class="ec-lmtt-10">FirmwareFeatures </tspan>and <tspan class="ec-lmtt-10">ExtendedFirmwareFeatures</tspan>. Present on newer Macs to avoid extra parsing
     of SMBIOS tables
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeaturesMask</tspan>
     Combined <tspan class="ec-lmtt-10">FirmwareFeaturesMask </tspan>and <tspan class="ec-lmtt-10">ExtendedFirmwareFeaturesMask</tspan>. Present on newer Macs to avoid extra
     parsing of SMBIOS tables.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID</tspan>
     Hardware <tspan class="ec-lmtt-10">BoardProduct </tspan>(e.g. <tspan class="ec-lmtt-10">Mac-35C1E88140C3E6CF</tspan>). Not present on real Macs, but used to avoid extra
     parsing of SMBIOS tables, especially in <tspan class="ec-lmtt-10">boot.efi</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB</tspan>
                                                                                                  
                                                                                                  
     Hardware <tspan class="ec-lmtt-10">BoardSerialNumber</tspan>. Override for MLB. Present on newer Macs (2013+ at least).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM</tspan>
     Hardware ROM. Override for ROM. Present on newer Macs (2013+ at least).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:prev-lang:kbd</tspan>
     ASCII string defining default keyboard layout. Format is <tspan class="ec-lmtt-10">lang-COUNTRY:keyboard</tspan>, e.g. <tspan class="ec-lmtt-10">ru-RU:252 </tspan>for Russian
     locale and ABC keyboard. Also accepts short forms: <tspan class="ec-lmtt-10">ru:252 </tspan>or <tspan class="ec-lmtt-10">ru:0 </tspan>(U.S. keyboard, compatible with 10.9). Full
     decoded keyboard list from <tspan class="ec-lmtt-10">AppleKeyboardLayouts-L.dat </tspan>can be found <a 
href="https://github.com/acidanthera/OpenCorePkg/tree/master/Utilities/AppleKeyboardLayouts" >here</a>. Using non-latin keyboard on 10.14
     will not enable ABC keyboard, unlike previous and subsequent macOS versions, and is thus not recommended
     in case 10.14 is needed.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:security-mode</tspan>
     ASCII  string  defining  FireWire  security  mode.  Legacy,  can  be  found  in  IOFireWireFamily  source  code  in
     <a 
href="https://opensource.apple.com/source/IOFireWireFamily/IOFireWireFamily-473/IOFireWireFamily.kmodproj/IOFireWireController.cpp.auto.html" >IOFireWireController.cpp</a>. It is recommended not to set this variable, which may speedup system startup. Setting
     to <tspan class="ec-lmtt-10">full </tspan>is equivalent to not setting the variable and <tspan class="ec-lmtt-10">none </tspan>disables FireWire security.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:UIScale</tspan>
     One-byte data defining <tspan class="ec-lmtt-10">boot.efi </tspan>user interface scaling. Should be <tspan class="ec-lmbx-10">01 </tspan>for normal screens and <tspan class="ec-lmbx-10">02 </tspan>for HiDPI
     screens.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:DefaultBackgroundColor</tspan>
     Four-byte <tspan class="ec-lmtt-10">BGRA </tspan>data defining <tspan class="ec-lmtt-10">boot.efi </tspan>user interface background colour. Standard colours include <tspan class="ec-lmbx-10">BF BF BF</tspan>
     <tspan class="ec-lmbx-10">00 </tspan>(Light Gray) and <tspan class="ec-lmbx-10">00 00 00 00 </tspan>(Syrah Black). Other colours may be set at user’s preference.</li></ul>
<a 
 id="x1-51001r54"></a>
<h4 class="subsectionHead"><span class="titlemark">9.5   </span> <a 
 id="x1-520005"></a>Other Variables</h4>
<!--l. 4022--><p class="noindent" >The following variables may be useful for certain configurations or troubleshooting:
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:boot-args</tspan>
     Kernel arguments, used to pass configuration to Apple kernel and drivers. There are many arguments, which
     may be found by looking for the use of <tspan class="ec-lmtt-10">PE_parse_boot_argn </tspan>function in the kernel or driver code. Some of the
     known boot arguments include:
         <ul class="itemize2">
         <li class="itemize"><tspan class="ec-lmtt-10">acpi_layer=0xFFFFFFFF</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">acpi_level=0xFFFF5F </tspan>(implies <a 
href="https://github.com/acpica/acpica/blob/master/source/include/acoutput.h" ><tspan class="ec-lmtt-10">ACPI_ALL_COMPONENTS</tspan></a>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">arch=i386 </tspan>(force kernel architecture to <tspan class="ec-lmtt-10">i386</tspan>, see <tspan class="ec-lmtt-10">KernelArch</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">batman=VALUE </tspan>(<tspan class="ec-lmtt-10">AppleSmartBatteryManager </tspan>debug mask)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">batman-nosmc=1 </tspan>(disable <tspan class="ec-lmtt-10">AppleSmartBatteryManager </tspan>SMC interface)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">cpus=VALUE </tspan>(maximum number of CPUs used)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">debug=VALUE </tspan>(debug mask)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">io=VALUE </tspan>(<tspan class="ec-lmtt-10">IOKit </tspan>debug mask)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">keepsyms=1 </tspan>(show panic log debug symbols)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">kextlog=VALUE </tspan>(kernel extension loading debug mask)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">nv_disable=1 </tspan>(disables NVIDIA GPU acceleration)
         </li>
                                                                                                  
                                                                                                  
         <li class="itemize"><tspan class="ec-lmtt-10">nvda_drv=1 </tspan>(legacy way to enable NVIDIA web driver, removed in 10.12)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">npci=0x2000 </tspan>(<a 
href="https://www.insanelymac.com/forum/topic/260539-1068-officially-released/?do=findComment&comment=1707972" >legacy</a>, disables <tspan class="ec-lmtt-10">kIOPCIConfiguratorPFM64</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">lapic_dont_panic=1</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">slide=VALUE </tspan>(manually set KASLR slide)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">smcdebug=VALUE </tspan>(<tspan class="ec-lmtt-10">AppleSMC </tspan>debug mask)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-amd_no_dgpu_accel </tspan>(alternative to <a 
href="https://github.com/acidanthera/WhateverGreen" >WhateverGreen</a>’s <tspan class="ec-lmtt-10">-radvesa </tspan>for new GPUs)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-nehalem_error_disable</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-no_compat_check </tspan>(disable model checking on 10.7+)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-s </tspan>(single mode)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-v </tspan>(verbose mode)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-x </tspan>(safe mode)</li></ul>
     <!--l. 4062--><p class="noindent" >There are multiple external places summarising macOS argument lists: <a 
href="https://osxeon.wordpress.com/2015/08/10/boot-argument-options-in-os-x" >example 1</a>, <a 
href="https://superuser.com/questions/255176/is-there-a-list-of-available-boot-args-for-darwin-os-x" >example 2</a>.
     </p></li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:bootercfg</tspan>
     Booter arguments, similar to <tspan class="ec-lmtt-10">boot-args </tspan>but for <tspan class="ec-lmtt-10">boot.efi</tspan>. Accepts a set of arguments, which are hexadecimal 64-bit
     values with or without <tspan class="ec-lmtt-10">0x</tspan>. At different stages <tspan class="ec-lmtt-10">boot.efi </tspan>will request different debugging (logging) modes (e.g. after
     <tspan class="ec-lmtt-10">ExitBootServices </tspan>it will only print to serial). Several booter arguments control whether these requests will succeed. The
     list of known requests is covered below:
         <ul class="itemize2">
         <li class="itemize"><tspan class="ec-lmtt-10">0x00 </tspan>– <tspan class="ec-lmtt-10">INIT</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x01 </tspan>– <tspan class="ec-lmtt-10">VERBOSE </tspan>(e.g. <tspan class="ec-lmtt-10">-v</tspan>, force console logging).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x02 </tspan>– <tspan class="ec-lmtt-10">EXIT</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x03 </tspan>– <tspan class="ec-lmtt-10">RESET:OK</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x04 </tspan>– <tspan class="ec-lmtt-10">RESET:FAIL </tspan>(e.g. unknown <tspan class="ec-lmtt-10">board-id</tspan>, hibernate mismatch, panic loop, etc.).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x05 </tspan>– <tspan class="ec-lmtt-10">RESET:RECOVERY</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x06 </tspan>– <tspan class="ec-lmtt-10">RECOVERY</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x07 </tspan>– <tspan class="ec-lmtt-10">REAN:START</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x08 </tspan>– <tspan class="ec-lmtt-10">REAN:END</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x09 </tspan>– <tspan class="ec-lmtt-10">DT </tspan>(can no longer log to DeviceTree).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0A </tspan>– <tspan class="ec-lmtt-10">EXITBS:START </tspan>(forced serial only).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0B </tspan>– <tspan class="ec-lmtt-10">EXITBS:END </tspan>(forced serial only).
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x0C </tspan>– <tspan class="ec-lmtt-10">UNKNOWN</tspan>.</li></ul>
     <!--l. 4093--><p class="noindent" >In 10.15 debugging support was mostly broken before 10.15.4 due to some kind of refactoring and introduction of a <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleDebugLog.h" >new
     debug protocol</a>. Some of the arguments and their values below may not be valid for versions prior to 10.15.4. The list of
     known arguments is covered below:
                                                                                                  
                                                                                                  
</p>
         <ul class="itemize2">
         <li class="itemize"><tspan class="ec-lmtt-10">boot-save-log=VALUE </tspan>— debug log save mode for normal boot.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0</tspan>
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1</tspan>
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— (default).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">3</tspan>
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">4 </tspan>— (save to file).</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">wake-save-log=VALUE </tspan>— debug log save mode for hibernation wake.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disabled.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1</tspan>
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— (default).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">3 </tspan>— (unavailable).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">4 </tspan>— (save to file, unavailable).</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">breakpoint=VALUE </tspan>— enables debug breaks (missing in production <tspan class="ec-lmtt-10">boot.efi</tspan>).
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disables debug breaks on errors (default).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables debug breaks on errors.</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">console=VALUE </tspan>— enables console logging.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disables console logging.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables console logging when debug protocol is missing (default).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— enables console logging unconditionally (unavailable).</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">embed-log-dt=VALUE </tspan>— enables DeviceTree logging.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disables DeviceTree logging (default).
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables DeviceTree logging.</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">kc-read-size=VALUE </tspan>— Chunk size used for buffered I/O from network or disk for prelinkedkernel reading and
         related. Set to 1MB (0x100000) by default, can be tuned for faster booting.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">log-level=VALUE </tspan>— log level bitmask.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0x01 </tspan>— enables trace logging (default).</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">serial=VALUE </tspan>— enables serial logging.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disables serial logging (default).
             </li>
                                                                                                  
                                                                                                  
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables serial logging for <tspan class="ec-lmtt-10">EXITBS:END </tspan>onwards.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— enables serial logging for <tspan class="ec-lmtt-10">EXITBS:START </tspan>onwards.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">3 </tspan>— enables serial logging when debug protocol is missing.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">4 </tspan>— enables serial logging unconditionally.</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">timestamps=VALUE </tspan>— enables timestamp logging.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— disables timestamp logging.
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables timestamp logging (default).</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">log=VALUE </tspan>— deprecated starting from 10.15.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— AppleLoggingConOutOrErrSet/AppleLoggingConOutOrErrPrint (classical ConOut/StdErr)
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— AppleLoggingStdErrSet/AppleLoggingStdErrPrint (StdErr or serial?)
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">4  </tspan>—   AppleLoggingFileSet/AppleLoggingFilePrint   (BOOTER.LOG/BOOTER.OLD   file   on   EFI
             partition)</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">debug=VALUE </tspan>— deprecated starting from 10.15.
             <ul class="itemize3">
             <li class="itemize"><tspan class="ec-lmtt-10">1 </tspan>— enables print something to BOOTER.LOG (stripped code implies there may be a crash)
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">2 </tspan>— enables perf logging to /efi/debug-log in the device three
             </li>
             <li class="itemize"><tspan class="ec-lmtt-10">4 </tspan>— enables timestamp printing for styled printf calls</li></ul>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">level=VALUE </tspan>— deprecated starting from 10.15. Verbosity level of DEBUG output. Everything but <tspan class="ec-lmtt-10">0x80000000 </tspan>is
         stripped from the binary, and this is the default value.</li></ul>
     <!--l. 4172--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: To see verbose output from <tspan class="ec-lmtt-10">boot.efi </tspan>on modern macOS versions enable <tspan class="ec-lmtt-10">AppleDebug </tspan>option. This will save the log
     to general OpenCore log. For versions before 10.15.4 set <tspan class="ec-lmtt-10">bootercfg </tspan>to <tspan class="ec-lmtt-10">log=1</tspan>. This will print verbose output
     onscreen.
     </p></li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:bootercfg-once</tspan>
     Booter arguments override removed after first launch. Otherwise equivalent to <tspan class="ec-lmtt-10">bootercfg</tspan>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:efiboot-perf-record</tspan>
     Enable performance log saving in <tspan class="ec-lmtt-10">boot.efi</tspan>. Performance log is saved to physical memory and is pointed by
     <tspan class="ec-lmtt-10">efiboot-perf-record-data </tspan>and <tspan class="ec-lmtt-10">efiboot-perf-record-size </tspan>variables. Starting from 10.15.4 it can also be saved to
     OpenCore log by <tspan class="ec-lmtt-10">AppleDebug </tspan>option.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:fmm-computer-name</tspan>
     Current saved host name. ASCII string.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:nvda_drv</tspan>
     NVIDIA Web Driver control variable. Takes ASCII digit <tspan class="ec-lmtt-10">1 </tspan>or <tspan class="ec-lmtt-10">0 </tspan>to enable or disable installed driver.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:run-efi-updater</tspan>
     Override EFI firmware updating support in macOS (MultiUpdater, ThorUtil, and so on). Setting this to <tspan class="ec-lmtt-10">No </tspan>or
     alternative boolean-castable value will prevent any firmware updates in macOS starting with 10.10 at
     least.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:StartupMute</tspan>
                                                                                                  
                                                                                                  
     Mute startup chime sound in firmware audio support. 8-bit integer. The value of <tspan class="ec-lmtt-10">0x00 </tspan>means unmuted. Missing variable
     or any other value means muted. This variable only affects Gibraltar machines (T2).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">7C436110-AB2A-4BBB-A880-FE41995C9F82:SystemAudioVolume</tspan>
     System audio volume level for firmware audio support. 8-bit integer. The bit of <tspan class="ec-lmtt-10">0x80 </tspan>means muted. Lower bits are used
     to encode volume range specific to installed audio codec. The value is capped by <tspan class="ec-lmtt-10">MaximumBootBeepVolume </tspan>AppleHDA
     layout value to avoid too loud audio playback in the firmware.</li></ul>
<a 
 id="x1-52001r50"></a>
<h3 class="sectionHead"><span class="titlemark">10   </span> <a 
 id="x1-5300010"></a>PlatformInfo</h3>
<!--l. 4219--><p class="noindent" >Platform information is comprised of several identification fields generated or filled manually to be compatible with macOS
services. The base part of the configuration may be obtained from <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/AppleModels" ><tspan class="ec-lmtt-10">AppleModels</tspan></a>, which itself generates a set of interfaces based
on a database in <a 
href="https://yaml.org/spec/1.2/spec.html" >YAML</a> format. These fields are written to three select destinations:
</p>
     <ul class="itemize1">
     <li class="itemize"><a 
href="https://www.dmtf.org/standards/smbios" >SMBIOS</a>
     </li>
     <li class="itemize"><a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Intel/Protocol/DataHub.h" >Data Hub</a>
     </li>
     <li class="itemize">NVRAM</li></ul>
<!--l. 4238--><p class="noindent" >Most of the fields specify the overrides in SMBIOS, and their field names conform to EDK2 <a 
href="https://github.com/acidanthera/audk/blob/master/MdePkg/Include/IndustryStandard/SmBios.h" >SmBios.h</a> header file. However,
several important fields reside in Data Hub and NVRAM. Some of the values can be found in more than one field and/or
destination, so there are two ways to control their update process: manual, where all the values are specified (the
default), and semi-automatic, where (<tspan class="ec-lmtt-10">Automatic</tspan>) only select values are specified, and later used for system
configuration.
</p><!--l. 4248--><p class="noindent" >To inspect SMBIOS contents <a 
href="http://www.nongnu.org/dmidecode" >dmidecode</a> utility can be used. Version with macOS specific enhancements can be downloaded
from <a 
href="https://github.com/acidanthera/dmidecode/releases" >Acidanthera/dmidecode</a>.
<a 
 id="x1-53001r55"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">10.1   </span> <a 
 id="x1-540001"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-54002x1"><tspan class="ec-lmtt-10">Automatic</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Generate PlatformInfo based on <tspan class="ec-lmtt-10">Generic </tspan>section instead of using values from <tspan class="ec-lmtt-10">DataHub</tspan>, <tspan class="ec-lmtt-10">NVRAM</tspan>,
     and <tspan class="ec-lmtt-10">SMBIOS </tspan>sections.
     <!--l. 4263--><p class="noindent" >Enabling this option is useful when <tspan class="ec-lmtt-10">Generic </tspan>section is flexible enough: </p>
         <ul class="itemize1">
         <li class="itemize">When enabled <tspan class="ec-lmtt-10">SMBIOS</tspan>, <tspan class="ec-lmtt-10">DataHub</tspan>, and <tspan class="ec-lmtt-10">PlatformNVRAM </tspan>data is unused.
         </li>
         <li class="itemize">When disabled <tspan class="ec-lmtt-10">Generic </tspan>section is unused.</li></ul>
     <!--l. 4272--><p class="noindent" ><tspan class="ec-lmbx-10">Warning</tspan>: It is strongly discouraged set this option to <tspan class="ec-lmtt-10">false </tspan>when intending to update platform information. The only
     reason to do that is when doing minor correction of the SMBIOS present and alike. In all other cases not using
     <tspan class="ec-lmtt-10">Automatic </tspan>may lead to hard to debug errors.
     </p></li>
     <li 
  class="enumerate" id="x1-54004x2"><tspan class="ec-lmtt-10">UpdateDataHub</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update Data Hub fields. These fields are read from <tspan class="ec-lmtt-10">Generic </tspan>or <tspan class="ec-lmtt-10">DataHub </tspan>sections depending on <tspan class="ec-lmtt-10">Automatic</tspan>
     value.
     </li>
     <li 
  class="enumerate" id="x1-54006x3"><tspan class="ec-lmtt-10">UpdateNVRAM</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update NVRAM fields related to platform information.
     <!--l. 4290--><p class="noindent" >These fields are read from <tspan class="ec-lmtt-10">Generic </tspan>or <tspan class="ec-lmtt-10">PlatformNVRAM </tspan>sections depending on <tspan class="ec-lmtt-10">Automatic </tspan>value. All the other fields are to
     be specified with <tspan class="ec-lmtt-10">NVRAM </tspan>section.
     </p><!--l. 4294--><p class="noindent" >If <tspan class="ec-lmtt-10">UpdateNVRAM </tspan>is set to <tspan class="ec-lmtt-10">false </tspan>the aforementioned variables can be updated with <a 
href="#x1-470009"><tspan class="ec-lmtt-10">NVRAM</tspan></a> section. If <tspan class="ec-lmtt-10">UpdateNVRAM </tspan>is set to
     <tspan class="ec-lmtt-10">true </tspan>the behaviour is undefined when any of the fields are present in <tspan class="ec-lmtt-10">NVRAM </tspan>section.
     </p></li>
     <li 
  class="enumerate" id="x1-54008x4"><tspan class="ec-lmtt-10">UpdateSMBIOS</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update SMBIOS fields. These fields are read from <tspan class="ec-lmtt-10">Generic </tspan>or <tspan class="ec-lmtt-10">SMBIOS </tspan>sections depending on <tspan class="ec-lmtt-10">Automatic</tspan>
     value.
     </li>
     <li 
  class="enumerate" id="x1-54010x5"><tspan class="ec-lmtt-10">UpdateSMBIOSMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Create</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update SMBIOS fields approach:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">TryOverwrite </tspan>— <tspan class="ec-lmtt-10">Overwrite </tspan>if new size is &#x003C;= than the page-aligned original and there are no issues with
         legacy region unlock. <tspan class="ec-lmtt-10">Create </tspan>otherwise. Has issues with some firmwares.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Create </tspan>—  Replace  the  tables  with  newly  allocated  EfiReservedMemoryType  at  AllocateMaxAddress
         without any fallbacks.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Overwrite </tspan>— Overwrite existing gEfiSmbiosTableGuid and gEfiSmbiosTable3Guid data if it fits new size.
         Abort with unspecified state otherwise.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Custom </tspan>—  Write  SMBIOS  tables  (<tspan class="ec-lmtt-10">gEfiSmbios(3)TableGuid</tspan>)  to  <tspan class="ec-lmtt-10">gOcCustomSmbios(3)TableGuid </tspan>to
         workaround firmwares overwriting SMBIOS contents at ExitBootServices. Otherwise equivalent to <tspan class="ec-lmtt-10">Create</tspan>.
         Requires patching AppleSmbios.kext and AppleACPIPlatform.kext to read from another GUID: <tspan class="ec-lmtt-10">&#x0022;EB9D2D31&#x0022;</tspan>
         - <tspan class="ec-lmtt-10">&#x0022;EB9D2D35&#x0022; </tspan>(in ASCII), done automatically by <tspan class="ec-lmtt-10">CustomSMBIOSGuid </tspan>quirk.</li></ul>
     <!--l. 4334--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: A side effect of using <tspan class="ec-lmtt-10">Custom </tspan>approach is making SMBIOS updates exclusive to macOS, avoiding a
     collision with existing Windows activation and custom OEM software but potentially breaking Apple-specific
     tools.
     </p></li>
     <li 
  class="enumerate" id="x1-54012x6"><tspan class="ec-lmtt-10">Generic</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update all fields. This section is read only when <tspan class="ec-lmtt-10">Automatic </tspan>is active.
     </li>
     <li 
  class="enumerate" id="x1-54014x7"><tspan class="ec-lmtt-10">DataHub</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Optional</tspan>: When <tspan class="ec-lmtt-10">Automatic </tspan>is <tspan class="ec-lmtt-10">true</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update Data Hub fields. This section is read only when <tspan class="ec-lmtt-10">Automatic </tspan>is not active.
     </li>
     <li 
  class="enumerate" id="x1-54016x8"><tspan class="ec-lmtt-10">PlatformNVRAM</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Optional</tspan>: When <tspan class="ec-lmtt-10">Automatic </tspan>is <tspan class="ec-lmtt-10">true</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update platform NVRAM fields. This section is read only when <tspan class="ec-lmtt-10">Automatic </tspan>is not active.
     </li>
     <li 
  class="enumerate" id="x1-54018x9"><tspan class="ec-lmtt-10">SMBIOS</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dictionary</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Optional</tspan>: When <tspan class="ec-lmtt-10">Automatic </tspan>is <tspan class="ec-lmtt-10">true</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Update SMBIOS fields. This section is read only when <tspan class="ec-lmtt-10">Automatic </tspan>is not active.</li></ol>
<a 
 id="x1-54019r57"></a>
<h4 class="subsectionHead"><span class="titlemark">10.2   </span> <a 
 id="x1-550002"></a>Generic Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-55002x1"><tspan class="ec-lmtt-10">SpoofVendor</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets SMBIOS vendor fields to <tspan class="ec-lmtt-10">Acidanthera</tspan>.
     <!--l. 4372--><p class="noindent" >It is dangerous to use Apple in SMBIOS vendor fields for reasons given in <tspan class="ec-lmtt-10">SystemManufacturer </tspan>description.
     However, certain firmwares may not provide valid values otherwise, which could break some software.
     </p></li>
     <li 
  class="enumerate" id="x1-55004x2"><tspan class="ec-lmtt-10">AdviseWindows</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forces Windows support in <tspan class="ec-lmtt-10">FirmwareFeatures</tspan>.
     <!--l. 4382--><p class="noindent" >Added bits to <tspan class="ec-lmtt-10">FirmwareFeatures</tspan>:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">FW_FEATURE_SUPPORTS_CSM_LEGACY_MODE </tspan>(<tspan class="ec-lmtt-10">0x1</tspan>) - Without this bit it is not possible to reboot to Windows
         installed on a drive with EFI partition being not the first partition on the disk.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">FW_FEATURE_SUPPORTS_UEFI_WINDOWS_BOOT </tspan>(<tspan class="ec-lmtt-10">0x20000000</tspan>) - Without this bit it is not possible to reboot
         to Windows installed on a drive with EFI partition being the first partition on the disk.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-55006x3"><tspan class="ec-lmtt-10">SystemMemoryStatus</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Auto</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Indicates whether system memory is upgradable in <tspan class="ec-lmtt-10">PlatformFeature</tspan>. This controls the visibility of the
     Memory tab in About This Mac.
     <!--l. 4400--><p class="noindent" >Valid values:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Auto </tspan>— use the original <tspan class="ec-lmtt-10">PlatformFeature </tspan>value.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Upgradable </tspan>— explicitly unset <tspan class="ec-lmtt-10">PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY </tspan>(<tspan class="ec-lmtt-10">0x2</tspan>) in <tspan class="ec-lmtt-10">PlatformFeature</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Soldered </tspan>— explicitly set <tspan class="ec-lmtt-10">PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY </tspan>(<tspan class="ec-lmtt-10">0x2</tspan>) in <tspan class="ec-lmtt-10">PlatformFeature</tspan>.</li></ul>
     <!--l. 4411--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: On certain Mac models (namely <tspan class="ec-lmtt-10">MacBookPro10,x </tspan>and any <tspan class="ec-lmtt-10">MacBookAir</tspan>), SPMemoryReporter.spreporter will ignore
     <tspan class="ec-lmtt-10">PT_FEATURE_HAS_SOLDERED_SYSTEM_MEMORY </tspan>and assume that system memory is non-upgradable.
     </p></li>
     <li 
  class="enumerate" id="x1-55008x4"><tspan class="ec-lmtt-10">ProcessorType </tspan><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0 </tspan>(Automatic)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to SMBIOS <tspan class="ec-lmtt-10">ProcessorType</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-55010x5"><tspan class="ec-lmtt-10">SystemProductName</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">MacPro6,1</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to SMBIOS <tspan class="ec-lmtt-10">SystemProductName</tspan>.
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-55012x6"><tspan class="ec-lmtt-10">SystemSerialNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">OPENCORE_SN1</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to SMBIOS <tspan class="ec-lmtt-10">SystemSerialNumber</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-55014x7"><tspan class="ec-lmtt-10">SystemUUID</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan>, GUID<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to SMBIOS <tspan class="ec-lmtt-10">SystemUUID</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-55016x8"><tspan class="ec-lmtt-10">MLB</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">OPENCORE_MLB_SN11</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to SMBIOS <tspan class="ec-lmtt-10">BoardSerialNumber</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-55018x9"><tspan class="ec-lmtt-10">ROM</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 6 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: all zero<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Refer to <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM</tspan>.
     </li></ol>
<a 
 id="x1-55019r58"></a>
<h4 class="subsectionHead"><span class="titlemark">10.3   </span> <a 
 id="x1-560003"></a>DataHub Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-56002x1"><tspan class="ec-lmtt-10">PlatformName</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">name </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Value found on Macs is <tspan class="ec-lmtt-10">platform </tspan>in ASCII.
     </li>
     <li 
  class="enumerate" id="x1-56004x2"><tspan class="ec-lmtt-10">SystemProductName</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:   Sets   <tspan class="ec-lmtt-10">Model  </tspan>in   <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>.   Value   found   on   Macs   is   equal   to   SMBIOS
     <tspan class="ec-lmtt-10">SystemProductName </tspan>in Unicode.
     </li>
     <li 
  class="enumerate" id="x1-56006x3"><tspan class="ec-lmtt-10">SystemSerialNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">SystemSerialNumber </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Value found on Macs is equal to SMBIOS
     <tspan class="ec-lmtt-10">SystemSerialNumber </tspan>in Unicode.
     </li>
     <li 
  class="enumerate" id="x1-56008x4"><tspan class="ec-lmtt-10">SystemUUID</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan>, GUID<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">system-id </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Value found on Macs is equal to SMBIOS <tspan class="ec-lmtt-10">SystemUUID</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-56010x5"><tspan class="ec-lmtt-10">BoardProduct</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:  Sets  <tspan class="ec-lmtt-10">board-id </tspan>in  <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>.  Value  found  on  Macs  is  equal  to  SMBIOS
     <tspan class="ec-lmtt-10">BoardProduct </tspan>in ASCII.
     </li>
     <li 
  class="enumerate" id="x1-56012x6"><tspan class="ec-lmtt-10">BoardRevision</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 1 byte<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">board-rev </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Value found on Macs seems to correspond to internal
     board revision (e.g. <tspan class="ec-lmtt-10">01</tspan>).
     </li>
     <li 
  class="enumerate" id="x1-56014x7"><tspan class="ec-lmtt-10">StartupPowerEvents</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">StartupPowerEvents </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Value found on Macs is power management
     state bitmask, normally 0. Known bits read by <tspan class="ec-lmtt-10">X86PlatformPlugin.kext</tspan>:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000001 </tspan>— Shutdown cause was a <tspan class="ec-lmtt-10">PWROK </tspan>event (Same as <tspan class="ec-lmtt-10">GEN_PMCON_2 </tspan>bit 0)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000002 </tspan>— Shutdown cause was a <tspan class="ec-lmtt-10">SYS_PWROK </tspan>event (Same as <tspan class="ec-lmtt-10">GEN_PMCON_2 </tspan>bit 1)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000004 </tspan>— Shutdown cause was a <tspan class="ec-lmtt-10">THRMTRIP# </tspan>event (Same as <tspan class="ec-lmtt-10">GEN_PMCON_2 </tspan>bit 3)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000008 </tspan>— Rebooted due to a SYS_RESET# event (Same as <tspan class="ec-lmtt-10">GEN_PMCON_2 </tspan>bit 4)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000010 </tspan>— Power Failure (Same as <tspan class="ec-lmtt-10">GEN_PMCON_3 </tspan>bit 1 <tspan class="ec-lmtt-10">PWR_FLR</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000020 </tspan>— Loss of RTC Well Power (Same as <tspan class="ec-lmtt-10">GEN_PMCON_3 </tspan>bit 2 <tspan class="ec-lmtt-10">RTC_PWR_STS</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00000040 </tspan>— General Reset Status (Same as <tspan class="ec-lmtt-10">GEN_PMCON_3 </tspan>bit 9 <tspan class="ec-lmtt-10">GEN_RST_STS</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0xffffff80 </tspan>— SUS Well Power Loss (Same as <tspan class="ec-lmtt-10">GEN_PMCON_3 </tspan>bit 14)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00010000 </tspan>— Wake cause was a ME Wake event (Same as PRSTS bit 0, <tspan class="ec-lmtt-10">ME_WAKE_STS</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00020000 </tspan>— Cold Reboot was ME Induced event (Same as <tspan class="ec-lmtt-10">PRSTS </tspan>bit 1 <tspan class="ec-lmtt-10">ME_HRST_COLD_STS</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00040000 </tspan>— Warm Reboot was ME Induced event (Same as <tspan class="ec-lmtt-10">PRSTS </tspan>bit 2 <tspan class="ec-lmtt-10">ME_HRST_WARM_STS</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00080000 </tspan>— Shutdown was ME Induced event (Same as <tspan class="ec-lmtt-10">PRSTS </tspan>bit 3 <tspan class="ec-lmtt-10">ME_HOST_PWRDN</tspan>)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00100000 </tspan>— Global reset ME Watchdog Timer event (Same as <tspan class="ec-lmtt-10">PRSTS </tspan>bit 6)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">0x00200000 </tspan>— Global reset PowerManagement Watchdog Timer event (Same as <tspan class="ec-lmtt-10">PRSTS </tspan>bit 15)</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-56016x8"><tspan class="ec-lmtt-10">InitialTSC</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">InitialTSC </tspan>in <tspan class="ec-lmtt-10">gEfiProcessorSubClassGuid</tspan>. Sets initial TSC value, normally 0.
     </li>
     <li 
  class="enumerate" id="x1-56018x9"><tspan class="ec-lmtt-10">FSBFrequency</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0 </tspan>(Automatic)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">FSBFrequency </tspan>in <tspan class="ec-lmtt-10">gEfiProcessorSubClassGuid</tspan>.
     <!--l. 4562--><p class="noindent" >Sets CPU FSB frequency. This value equals to CPU nominal frequency divided by CPU maximum bus ratio and is
     specified in Hz. Refer to <tspan class="ec-lmtt-10">MSR_NEHALEM_PLATFORM_INFO</tspan> (<tspan class="ec-lmtt-10">CEh</tspan>) MSR value to determine maximum bus ratio on modern
     Intel CPUs.
     </p><!--l. 4567--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This value is not used on Skylake and newer but is still provided to follow suit.
     </p></li>
     <li 
  class="enumerate" id="x1-56020x10"><tspan class="ec-lmtt-10">ARTFrequency</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 64-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0 </tspan>(Automatic)<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">ARTFrequency </tspan>in <tspan class="ec-lmtt-10">gEfiProcessorSubClassGuid</tspan>.
     <!--l. 4576--><p class="noindent" >This value contains CPU ART frequency, also known as crystal clock frequency. Its existence is exclusive to Skylake
     generation and newer. The value is specified in Hz, and is normally 24 MHz for client Intel segment, 25 MHz for
     server Intel segment, and 19.2 MHz for Intel Atom CPUs. macOS till 10.15 inclusive assumes 24 MHz by
     default.
     </p><!--l. 4581--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: On Intel Skylake X ART frequency may be a little less (approx. 0.25%) than 24 or 25 MHz due to special
     EMI-reduction circuit as described in <a 
href="https://github.com/acidanthera/bugtracker/issues/448#issuecomment-524914166" >Acidanthera Bugtracker</a>.
     </p></li>
     <li 
  class="enumerate" id="x1-56022x11"><tspan class="ec-lmtt-10">DevicePathsSupported</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 32-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">DevicePathsSupported </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Must be set to <tspan class="ec-lmtt-10">1 </tspan>for AppleACPIPlatform.kext to
     append SATA device paths to <tspan class="ec-lmtt-10">Boot#### </tspan>and <tspan class="ec-lmtt-10">efi-boot-device-data </tspan>variables. Set to <tspan class="ec-lmtt-10">1 </tspan>on all modern
     Macs.
     </li>
     <li 
  class="enumerate" id="x1-56024x12"><tspan class="ec-lmtt-10">SmcRevision</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 6 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">REV </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Custom property read by <tspan class="ec-lmtt-10">VirtualSMC </tspan>or <tspan class="ec-lmtt-10">FakeSMC </tspan>to generate SMC
     <tspan class="ec-lmtt-10">REV </tspan>key.
     </li>
     <li 
  class="enumerate" id="x1-56026x13"><tspan class="ec-lmtt-10">SmcBranch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">RBr </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Custom property read by <tspan class="ec-lmtt-10">VirtualSMC </tspan>or <tspan class="ec-lmtt-10">FakeSMC </tspan>to generate SMC
     <tspan class="ec-lmtt-10">RBr </tspan>key.
     </li>
     <li 
  class="enumerate" id="x1-56028x14"><tspan class="ec-lmtt-10">SmcPlatform</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets <tspan class="ec-lmtt-10">RPlt </tspan>in <tspan class="ec-lmtt-10">gEfiMiscSubClassGuid</tspan>. Custom property read by <tspan class="ec-lmtt-10">VirtualSMC </tspan>or <tspan class="ec-lmtt-10">FakeSMC </tspan>to generate SMC
     <tspan class="ec-lmtt-10">RPlt </tspan>key.</li></ol>
<a 
 id="x1-56029r59"></a>
<h4 class="subsectionHead"><span class="titlemark">10.4   </span> <a 
 id="x1-570004"></a>PlatformNVRAM Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-57002x1"><tspan class="ec-lmtt-10">BID</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Specifies the value of NVRAM variable <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_BID</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-57004x2"><tspan class="ec-lmtt-10">ROM</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 6 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Specifies the values of NVRAM variables <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_ROM </tspan>and
     <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ROM</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-57006x3"><tspan class="ec-lmtt-10">MLB</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Specifies the values of NVRAM variables <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:HW_MLB </tspan>and
                                                                                                  
                                                                                                  
     <tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:MLB</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-57008x4"><tspan class="ec-lmtt-10">FirmwareFeatures</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This variable comes in pair with <tspan class="ec-lmtt-10">FirmwareFeaturesMask</tspan>. Specifies the values of NVRAM
     variables:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeatures</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeatures</tspan></li></ul>
     </li>
     <li 
  class="enumerate" id="x1-57010x5"><tspan class="ec-lmtt-10">FirmwareFeaturesMask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Not installed<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This variable comes in pair with <tspan class="ec-lmtt-10">FirmwareFeatures</tspan>. Specifies the values of NVRAM variables:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:FirmwareFeaturesMask</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14:ExtendedFirmwareFeaturesMask</tspan></li></ul>
     </li></ol>
<a 
 id="x1-57011r60"></a>
<h4 class="subsectionHead"><span class="titlemark">10.5   </span> <a 
 id="x1-580005"></a>SMBIOS Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-58002x1"><tspan class="ec-lmtt-10">BIOSVendor</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: BIOS Information (Type 0) — Vendor<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: BIOS Vendor. All rules of <tspan class="ec-lmtt-10">SystemManufacturer </tspan>do apply.
     </li>
     <li 
  class="enumerate" id="x1-58004x2"><tspan class="ec-lmtt-10">BIOSVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: BIOS Information (Type 0) — BIOS Version<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>:  Firmware  version.  This  value  gets  updated  and  takes  part  in  update  delivery  configuration
     and  macOS  version  compatibility.  This  value  could  look  like  <tspan class="ec-lmtt-10">MM71.88Z.0234.B00.1809171422 </tspan>in  older
     firmwares,   and   is   described   in   <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Guid/BiosId.h" >BiosId.h</a>.   In   newer   firmwares   it   should   look   like   <tspan class="ec-lmtt-10">236.0.0.0.0  </tspan>or
     <tspan class="ec-lmtt-10">220.230.16.0.0</tspan><tspan class="ec-lmtt-10"> (iBridge:</tspan><tspan class="ec-lmtt-10"> 16.16.2542.0.0,0)</tspan>. iBridge version is read from <tspan class="ec-lmtt-10">BridgeOSVersion </tspan>variable, and
     is only present on macs with T2.
                                                                                                  
                                                                                                  
     <div class="verbatim" id="verbatim-1">
     Apple ROM Version
      <br /> BIOS ID:      MBP151.88Z.F000.B00.1811142212
      <br /> Model:        MBP151
      <br /> EFI Version:  220.230.16.0.0
      <br /> Built by:     root@quinoa
      <br /> Date:         Wed Nov 14 22:12:53 2018
      <br /> Revision:     220.230.16 (B&#x0026;I)
      <br /> ROM Version:  F000_B00
      <br /> Build Type:   Official Build, RELEASE
      <br /> Compiler:     Apple LLVM version 10.0.0 (clang-1000.2.42)
      <br /> UUID:         E5D1475B-29FF-32BA-8552-682622BA42E1
      <br /> UUID:         151B0907-10F9-3271-87CD-4BF5DBECACF5</div>
     <!--l. 4710--><p class="nopar" >
     </p></li>
     <li 
  class="enumerate" id="x1-58006x3"><tspan class="ec-lmtt-10">BIOSReleaseDate</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: BIOS Information (Type 0) — BIOS Release Date<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Firmware release date. Similar to <tspan class="ec-lmtt-10">BIOSVersion</tspan>. May look like <tspan class="ec-lmtt-10">12/08/2017</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58008x4"><tspan class="ec-lmtt-10">SystemManufacturer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — Manufacturer<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: OEM manufacturer of the particular board. Shall not be specified unless strictly required. Should <tspan class="ec-lmri-10">not</tspan>
     contain <tspan class="ec-lmtt-10">Apple</tspan><tspan class="ec-lmtt-10"> Inc.</tspan>, as this confuses numerous services present in the operating system, such as firmware updates,
     eficheck, as well as kernel extensions developed in Acidanthera, such as Lilu and its plugins. In addition it will also make
     some operating systems like Linux unbootable.
     </li>
     <li 
  class="enumerate" id="x1-58010x5"><tspan class="ec-lmtt-10">SystemProductName</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1), Product Name<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Preferred Mac model used to mark the device as supported by the operating system. This value must be
     specified by any configuration for later automatic generation of the related values in this and other SMBIOS tables and
     related configuration parameters. If <tspan class="ec-lmtt-10">SystemProductName </tspan>is not compatible with the target operating system,
     <tspan class="ec-lmtt-10">-no_compat_check </tspan>boot argument may be used as an override.
     <!--l. 4743--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: If <tspan class="ec-lmtt-10">SystemProductName </tspan>is unknown, and related fields are unspecified, default values should be assumed as being
     set to <tspan class="ec-lmtt-10">MacPro6,1 </tspan>data. The list of known products can be found in <tspan class="ec-lmtt-10">AppleModels</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-58012x6"><tspan class="ec-lmtt-10">SystemVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — Version<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Product iteration version number. May look like <tspan class="ec-lmtt-10">1.1</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58014x7"><tspan class="ec-lmtt-10">SystemSerialNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — Serial Number<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Product serial number in defined format. Known formats are described in <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macserial/FORMAT.md" >macserial</a>.
     </li>
     <li 
  class="enumerate" id="x1-58016x8"><tspan class="ec-lmtt-10">SystemUUID</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan>, GUID<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — UUID<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: A UUID is an identifier that is designed to be unique across both time and space. It requires no central
     registration process.
     </li>
     <li 
  class="enumerate" id="x1-58018x9"><tspan class="ec-lmtt-10">SystemSKUNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — SKU Number<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Mac Board ID (<tspan class="ec-lmtt-10">board-id</tspan>). May look like <tspan class="ec-lmtt-10">Mac-7BA5B2D9E42DDD94 </tspan>or <tspan class="ec-lmtt-10">Mac-F221BEC8 </tspan>in older models.
     Sometimes it can be just empty.
     </li>
     <li 
  class="enumerate" id="x1-58020x10"><tspan class="ec-lmtt-10">SystemFamily</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Information (Type 1) — Family<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Family name. May look like <tspan class="ec-lmtt-10">iMac</tspan><tspan class="ec-lmtt-10"> Pro</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58022x11"><tspan class="ec-lmtt-10">BoardManufacturer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) - Manufacturer<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Board manufacturer. All rules of <tspan class="ec-lmtt-10">SystemManufacturer </tspan>do apply.
     </li>
     <li 
  class="enumerate" id="x1-58024x12"><tspan class="ec-lmtt-10">BoardProduct</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) - Product<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Mac Board ID (<tspan class="ec-lmtt-10">board-id</tspan>). May look like <tspan class="ec-lmtt-10">Mac-7BA5B2D9E42DDD94 </tspan>or <tspan class="ec-lmtt-10">Mac-F221BEC8 </tspan>in older
     models.
     </li>
     <li 
  class="enumerate" id="x1-58026x13"><tspan class="ec-lmtt-10">BoardVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) - Version<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Board version number. Varies, may match <tspan class="ec-lmtt-10">SystemProductName </tspan>or <tspan class="ec-lmtt-10">SystemProductVersion</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58028x14"><tspan class="ec-lmtt-10">BoardSerialNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) — Serial Number<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Board serial number in defined format. Known formats are described in <a 
href="https://github.com/acidanthera/macserial/blob/master/FORMAT.md" >macserial</a>.
     </li>
     <li 
  class="enumerate" id="x1-58030x15"><tspan class="ec-lmtt-10">BoardAssetTag</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) — Asset Tag<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Asset tag number. Varies, may be empty or <tspan class="ec-lmtt-10">Type2</tspan><tspan class="ec-lmtt-10"> -</tspan><tspan class="ec-lmtt-10"> Board</tspan><tspan class="ec-lmtt-10"> Asset</tspan><tspan class="ec-lmtt-10"> Tag</tspan>.
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-58032x16"><tspan class="ec-lmtt-10">BoardType</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) — Board Type<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Either <tspan class="ec-lmtt-10">0xA </tspan>(Motherboard (includes processor, memory, and I/O) or <tspan class="ec-lmtt-10">0xB </tspan>(Processor/Memory Module),
     refer to Table 15 – Baseboard: Board Type for more details.
     </li>
     <li 
  class="enumerate" id="x1-58034x17"><tspan class="ec-lmtt-10">BoardLocationInChassis</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Baseboard (or Module) Information (Type 2) — Location in Chassis<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Varies, may be empty or <tspan class="ec-lmtt-10">Part</tspan><tspan class="ec-lmtt-10"> Component</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58036x18"><tspan class="ec-lmtt-10">ChassisManufacturer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Enclosure or Chassis (Type 3) — Manufacturer<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Board manufacturer. All rules of <tspan class="ec-lmtt-10">SystemManufacturer </tspan>do apply.
     </li>
     <li 
  class="enumerate" id="x1-58038x19"><tspan class="ec-lmtt-10">ChassisType</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Enclosure or Chassis (Type 3) — Type<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Chassis type, refer to Table 17 — System Enclosure or Chassis Types for more details.
     </li>
     <li 
  class="enumerate" id="x1-58040x20"><tspan class="ec-lmtt-10">ChassisVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Enclosure or Chassis (Type 3) — Version<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Should match <tspan class="ec-lmtt-10">BoardProduct</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58042x21"><tspan class="ec-lmtt-10">ChassisSerialNumber</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Enclosure or Chassis (Type 3) — Version<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Should match <tspan class="ec-lmtt-10">SystemSerialNumber</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58044x22"><tspan class="ec-lmtt-10">ChassisAssetTag</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: System Enclosure or Chassis (Type 3) — Asset Tag Number<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Chassis type name. Varies, could be empty or <tspan class="ec-lmtt-10">MacBook-Aluminum</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58046x23"><tspan class="ec-lmtt-10">PlatformFeature</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 32-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0xFFFFFFFF</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: <tspan class="ec-lmtt-10">APPLE_SMBIOS_TABLE_TYPE133 </tspan>- <tspan class="ec-lmtt-10">PlatformFeature</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Platform features bitmask. Refer to <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h" >AppleFeatures.h</a> for more details. Use <tspan class="ec-lmtt-10">0xFFFFFFFF </tspan>value to not
     provide this table.
     </li>
     <li 
  class="enumerate" id="x1-58048x24"><tspan class="ec-lmtt-10">SmcVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 16 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: All zero<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: <tspan class="ec-lmtt-10">APPLE_SMBIOS_TABLE_TYPE134 </tspan>- <tspan class="ec-lmtt-10">Version</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: ASCII string containing SMC version in upper case. Missing on T2 based Macs. Ignored when
     zero.
     </li>
     <li 
  class="enumerate" id="x1-58050x25"><tspan class="ec-lmtt-10">FirmwareFeatures</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: <tspan class="ec-lmtt-10">APPLE_SMBIOS_TABLE_TYPE128 </tspan>- <tspan class="ec-lmtt-10">FirmwareFeatures </tspan>and <tspan class="ec-lmtt-10">ExtendedFirmwareFeatures</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: 64-bit firmware features bitmask. Refer to <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h" >AppleFeatures.h</a> for more details. Lower 32 bits match
     <tspan class="ec-lmtt-10">FirmwareFeatures</tspan>. Upper 64 bits match <tspan class="ec-lmtt-10">ExtendedFirmwareFeatures</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58052x26"><tspan class="ec-lmtt-10">FirmwareFeaturesMask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> data</tspan>, 8 bytes<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: <tspan class="ec-lmtt-10">APPLE_SMBIOS_TABLE_TYPE128 </tspan>- <tspan class="ec-lmtt-10">FirmwareFeaturesMask </tspan>and <tspan class="ec-lmtt-10">ExtendedFirmwareFeaturesMask</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Supported bits of extended firmware features bitmask. Refer to <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleFeatures.h" >AppleFeatures.h</a> for more details. Lower 32
     bits match <tspan class="ec-lmtt-10">FirmwareFeaturesMask</tspan>. Upper 64 bits match <tspan class="ec-lmtt-10">ExtendedFirmwareFeaturesMask</tspan>.
     </li>
     <li 
  class="enumerate" id="x1-58054x27"><tspan class="ec-lmtt-10">ProcessorType</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 16-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0 </tspan>(Automatic)<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: <tspan class="ec-lmtt-10">APPLE_SMBIOS_TABLE_TYPE131 </tspan>- <tspan class="ec-lmtt-10">ProcessorType</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Combined of Processor Major and Minor types.
     <!--l. 4923--><p class="noindent" >Automatic value generation tries to provide most accurate value for the currently installed CPU. When this fails please
     make sure to create an <a 
href="https://github.com/acidanthera/bugtracker/issues" >issue</a> and provide <tspan class="ec-lmtt-10">sysctl machdep.cpu </tspan>and <a 
href="https://github.com/acidanthera/dmidecode" ><tspan class="ec-lmtt-10">dmidecode</tspan></a> output. For a full list of available values
     and their limitations (the value will only apply if the CPU core count matches) refer to Apple SMBIOS definitions header
     <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/IndustryStandard/AppleSmBios.h" >here</a>.
     </p></li>
     <li 
  class="enumerate" id="x1-58056x28"><tspan class="ec-lmtt-10">MemoryFormFactor</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan>, 8-bit<br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: OEM specified<br 
class="newline" /><tspan class="ec-lmbx-10">SMBIOS</tspan>: Memory Device (Type 17) — Form Factor<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Memory form factor. On Macs it should be DIMM or SODIMM.</li></ol>
<a 
 id="x1-58057r56"></a>
<h3 class="sectionHead"><span class="titlemark">11   </span> <a 
 id="x1-5900011"></a>UEFI</h3>
<a 
 id="x1-59001r61"></a>
<h4 class="subsectionHead"><span class="titlemark">11.1   </span> <a 
 id="x1-600001"></a>Introduction</h4>
<!--l. 4944--><p class="noindent" ><a 
href="https://uefi.org/specifications" >UEFI</a> (Unified Extensible Firmware Interface) is a specification that defines a software interface between an operating system
and platform firmware. This section allows to load additional UEFI modules and/or apply tweaks for the onboard firmware. To
inspect firmware contents, apply modifications and perform upgrades <a 
href="https://github.com/LongSoft/UEFITool/releases" >UEFITool</a> and supplementary utilities can be
used.
<a 
 id="x1-60001r63"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">11.2   </span> <a 
 id="x1-610002"></a>Drivers</h4>
<!--l. 4953--><p class="noindent" >Depending on the firmware a different set of drivers may be required. Loading an incompatible driver may lead the
system to unbootable state or even cause permanent firmware damage. Some of the known drivers are listed
below:
</p>
                                                                                                  
                                                                                                  
<div class="tabular"> <table id="TBL-4" class="tabular" 
 
><colgroup id="TBL-4-1g"><col 
id="TBL-4-1" /><col 
id="TBL-4-2" /></colgroup><tr  
 style="vertical-align:baseline;" id="TBL-4-1-"><td  style="white-space:normal; text-align:left;" id="TBL-4-1-1"  
class="td11"><!--l. 4958--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">AudioDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>            </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-1-2"  
class="td11"><!--l. 4959--><p class="noindent" >HDA  audio  support  driver  in  UEFI  firmwares  for  most  Intel  and  some  other  analog
audio controllers. Staging driver, refer to <a 
href="https://github.com/acidanthera/bugtracker/issues/740" >acidanthera/bugtracker#740</a> for known issues in
AudioDxe.                                                                                                          </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-2-"><td  style="white-space:normal; text-align:left;" id="TBL-4-2-1"  
class="td11"><!--l. 4962--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">CrScreenshotDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>   </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-2-2"  
class="td11"><!--l. 4963--><p class="noindent" >Screenshot  making  driver  saving  images  to  the  root  of  OpenCore  partition  (ESP)  or
any  available  writeable  filesystem  upon  pressing  <tspan class="ec-lmtt-10">F10</tspan>.  This  is  a  modified  version  of
<a 
href="https://github.com/LongSoft/CrScreenshotDxe" ><tspan class="ec-lmtt-10">CrScreenshotDxe</tspan></a> driver by <a 
href="https://github.com/NikolajSchlej" >Nikolaj Schlej</a>.                                                                </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-3-"><td  style="white-space:normal; text-align:left;" id="TBL-4-3-1"  
class="td11"><!--l. 4967--><p class="noindent" ><a 
href="https://github.com/acidanthera/OcBinaryData" ><tspan class="ec-lmtt-10">ExFatDxe</tspan></a>           </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-3-2"  
class="td11"><!--l. 4968--><p class="noindent" >Proprietary  ExFAT  file  system  driver  for  Bootcamp  support  commonly  found  in  Apple
firmwares. For Sandy Bridge and earlier CPUs <tspan class="ec-lmtt-10">ExFatDxeLegacy </tspan>driver should be used due
to the lack of <tspan class="ec-lmtt-10">RDRAND </tspan>instruction support.                                                                 </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-4-"><td  style="white-space:normal; text-align:left;" id="TBL-4-4-1"  
class="td11"><!--l. 4971--><p class="noindent" ><a 
href="https://github.com/acidanthera/OcBinaryData" ><tspan class="ec-lmtt-10">HfsPlus</tspan></a>            </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-4-2"  
class="td11"><!--l. 4972--><p class="noindent" >Proprietary HFS file system driver with bless support commonly found in Apple firmwares.
For Sandy Bridge and earlier CPUs <tspan class="ec-lmtt-10">HfsPlusLegacy </tspan>driver should be used due to the lack of
<tspan class="ec-lmtt-10">RDRAND </tspan>instruction support.                                                                                    </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-5-"><td  style="white-space:normal; text-align:left;" id="TBL-4-5-1"  
class="td11"><!--l. 4975--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">HiiDatabase</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-5-2"  
class="td11"><!--l. 4976--><p class="noindent" >HII services support driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. This driver is included in most firmwares
starting with Ivy Bridge generation. Some applications with the GUI like UEFI Shell may
need this driver to work properly.                                                                            </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-6-"><td  style="white-space:normal; text-align:left;" id="TBL-4-6-1"  
class="td11"><!--l. 4979--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">EnhancedFatDxe</tspan></a>     </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-6-2"  
class="td11"><!--l. 4980--><p class="noindent" >FAT filesystem driver from <tspan class="ec-lmtt-10">FatPkg</tspan>. This driver is embedded in all UEFI firmwares, and
cannot be used from OpenCore. It is known that multiple firmwares have a bug in their FAT
support implementation, which leads to corrupted filesystems on write attempt. Embedding
this driver within the firmware may be required in case writing to EFI partition is needed
during the boot process.                                                                                        </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-7-"><td  style="white-space:normal; text-align:left;" id="TBL-4-7-1"  
class="td11"><!--l. 4985--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">NvmExpressDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>      </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-7-2"  
class="td11"><!--l. 4986--><p class="noindent" >NVMe support driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. This driver is included in most firmwares starting
with Broadwell generation. For Haswell and earlier embedding it within the firmware may
be more favourable in case a NVMe SSD drive is installed.                                           </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-8-"><td  style="white-space:normal; text-align:left;" id="TBL-4-8-1"  
class="td11"><!--l. 4989--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">OpenCanopy</tspan></a><tspan class="ec-lmbx-10">*</tspan>          </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-8-2"  
class="td11"><!--l. 4990--><p class="noindent" ><a 
href="#x1-630004">OpenCore plugin</a> implementing graphical interface.                                                     </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-9-"><td  style="white-space:normal; text-align:left;" id="TBL-4-9-1"  
class="td11"><!--l. 4991--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">OpenRuntime</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-9-2"  
class="td11"><!--l. 4992--><p class="noindent" ><a 
href="#x1-640005">OpenCore plugin</a> implementing <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol.                                    </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-10-"><td  style="white-space:normal; text-align:left;" id="TBL-4-10-1"  
class="td11"><!--l. 4993--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">OpenUsbKbDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>       </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-10-2"  
class="td11"><!--l. 4994--><p class="noindent" >USB keyboard driver adding the support of <tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>protocols on top of a
custom USB keyboard driver implementation. This is an alternative to builtin <tspan class="ec-lmtt-10">KeySupport</tspan>,
which may work better or worse depending on the firmware.                                         </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-11-"><td  style="white-space:normal; text-align:left;" id="TBL-4-11-1"  
class="td11"><!--l. 4997--><p class="noindent" ><a 
href="https://github.com/acidanthera/OcBinaryData" ><tspan class="ec-lmtt-10">PartitionDxe</tspan></a>       </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-11-2"  
class="td11"><!--l. 4998--><p class="noindent" >Proprietary partition management driver with Apple Partitioning Scheme support commonly
found in Apple firmwares. This driver can be used to support loading older DMG recoveries
such as macOS 10.9 using Apple Partitioning Scheme. For Sandy Bridge and earlier CPUs
<tspan class="ec-lmtt-10">PartitionDxeLegacy </tspan>driver should be used due to the lack of <tspan class="ec-lmtt-10">RDRAND </tspan>instruction support. </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-12-"><td  style="white-space:normal; text-align:left;" id="TBL-4-12-1"  
class="td11"><!--l. 5003--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">Ps2KeyboardDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>     </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-12-2"  
class="td11"><!--l. 5004--><p class="noindent" >PS/2 keyboard driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. <tspan class="ec-lmtt-10">OpenDuetPkg </tspan>and some firmwares may not include
this driver, but it is necessary for PS/2 keyboard to work. Note, unlike <tspan class="ec-lmtt-10">OpenUsbKbDxe </tspan>this
driver has no <tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>support and thus requires <tspan class="ec-lmtt-10">KeySupport </tspan>to be enabled.</p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-13-"><td  style="white-space:normal; text-align:left;" id="TBL-4-13-1"  
class="td11"><!--l. 5008--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">Ps2MouseDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-13-2"  
class="td11"><!--l. 5009--><p class="noindent" >PS/2 mouse driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. Some very old laptop firmwares may not include
this driver, but it is necessary for touchpad to work in UEFI graphical interfaces, such as
<tspan class="ec-lmtt-10">OpenCanopy</tspan>.                                                                                                        </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-14-"><td  style="white-space:normal; text-align:left;" id="TBL-4-14-1"  
class="td11"><!--l. 5012--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">UsbMouseDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-14-2"  
class="td11"><!--l. 5013--><p class="noindent" >USB mouse driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. Some virtual machine firmwares like OVMF may not
include this driver, but it is necessary for mouse to work in UEFI graphical interfaces, such
as <tspan class="ec-lmtt-10">OpenCanopy</tspan>.                                                                                                    </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-15-"><td  style="white-space:normal; text-align:left;" id="TBL-4-15-1"  
class="td11"><!--l. 5016--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">VBoxHfs</tspan></a>            </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-15-2"  
class="td11"><!--l. 5017--><p class="noindent" >HFS file system driver with bless support. This driver is an alternative to a closed source
<tspan class="ec-lmtt-10">HfsPlus </tspan>driver  commonly  found  in  Apple  firmwares.  While  it  is  feature  complete,  it  is
approximately 3 times slower and is yet to undergo a security audit.                              </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-4-16-"><td  style="white-space:normal; text-align:left;" id="TBL-4-16-1"  
class="td11"><!--l. 5021--><p class="noindent" ><a 
href="https://github.com/acidanthera/audk" ><tspan class="ec-lmtt-10">XhciDxe</tspan></a><tspan class="ec-lmbx-10">*</tspan>              </p></td><td  style="white-space:normal; text-align:left;" id="TBL-4-16-2"  
class="td11"><!--l. 5022--><p class="noindent" >XHCI USB controller support driver from <tspan class="ec-lmtt-10">MdeModulePkg</tspan>. This driver is included in most
firmwares starting with Sandy Bridge generation. For earlier firmwares or legacy systems it
may be used to support external USB 3.0 PCI cards.                                                   </p></td>
</tr></table></div>
<!--l. 5027--><p class="noindent" >Driver marked with <tspan class="ec-lmbx-10">* </tspan>are bundled with OpenCore. To compile the drivers from UDK (EDK II) the same command used for
OpenCore compilation can be taken, but choose a corresponding package: </p><!--l. 5030-->
<div class="lstlisting" id="listing-15"><span class="label"><a 
 id="x1-61001r1"></a></span><tspan class="ec-lmtk-10">git</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">clone</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">https</tspan><tspan class="ec-lmtt-10">://</tspan><tspan class="ec-lmtt-10">github</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">com</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">acidanthera</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">audk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDK</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-61002r2"></a></span><tspan class="ec-lmtk-10">cd</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDK</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-61003r3"></a></span><tspan class="ec-lmtk-10">source</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">edksetup</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">sh</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-61004r4"></a></span><tspan class="ec-lmtk-10">make</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">C</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">BaseTools</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-61005r5"></a></span><tspan class="ec-lmtk-10">build</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">b</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RELEASE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">t</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">XCODE5</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">FatPkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">FatPkg</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dsc</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-61006r6"></a></span><tspan class="ec-lmtk-10">build</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">a</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">X64</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">b</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RELEASE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">t</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">XCODE5</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">MdeModulePkg</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">MdeModulePkg</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dsc</tspan>
</div>
<a 
 id="x1-61007r64"></a>
<h4 class="subsectionHead"><span class="titlemark">11.3   </span> <a 
 id="x1-620003"></a>Tools and Applications</h4>
<!--l. 5041--><p class="noindent" >Standalone tools may help to debug firmware and hardware. Some of the known tools are listed below. While some tools can be
launched from within OpenCore, see more details in the <a 
href="#x1-420116">Tools</a> subsection of the configuration, most should be run separately
either directly or from <tspan class="ec-lmtt-10">Shell</tspan>.
                                                                                                  
                                                                                                  
</p><!--l. 5046--><p class="noindent" >To boot into OpenShell or any other tool directly save <tspan class="ec-lmtt-10">OpenShell.efi </tspan>under the name of <tspan class="ec-lmtt-10">EFI\BOOT\BOOTX64.EFI </tspan>on a FAT32
partition. In general it is unimportant whether the partition scheme is <tspan class="ec-lmtt-10">GPT </tspan>or <tspan class="ec-lmtt-10">MBR</tspan>.
</p><!--l. 5051--><p class="noindent" >While the previous approach works both on Macs and other computers, an alternative Mac-only approach to bless the tool on
an HFS+ or APFS volume:
</p>
<!--l. 5055-->
<a 
 id="x1-62001r3"></a>
<a 
 id="x1-62002"></a>
<div class="lstlisting" id="listing-16"><span class="label"><a 
 id="x1-62003r1"></a></span><tspan class="ec-lmtk-10">sudo</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">bless</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">verbose</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">le</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Volumes</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">VOLNAME</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">DIR</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OpenShell</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">e</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-62004r2"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">folder</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Volumes</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">VOLNAME</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">DIR</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">setBoot</tspan>
<figcaption class="caption" ><span class="id">Listing 3:</span><span  
class="content">Blessing tool</span></figcaption><!--tex4ht:label?: x1-62001r -->
</div>
<!--l. 5060--><p class="noindent" ><tspan class="ec-lmri-10">Note 1</tspan>: <tspan class="ec-lmtt-10">/System/Library/CoreServices/BridgeVersion.bin </tspan>should be copied to <tspan class="ec-lmtt-10">/Volumes/VOLNAME/DIR</tspan>.
<br 
class="newline" /><tspan class="ec-lmri-10">Note 2</tspan>: To be able to use <tspan class="ec-lmtt-10">bless </tspan><a 
href="https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html" >disabling System Integrity Protection</a> is necessary. <br 
class="newline" /><tspan class="ec-lmri-10">Note 3</tspan>: To be able to boot <a 
href="https://support.apple.com/HT208330" >Secure Boot</a> might be disabled if present.
</p><!--l. 5067--><p class="noindent" >Some of the known tools are listed below (builtin tools are marked with <tspan class="ec-lmbx-10">*</tspan>):
</p>
<div class="tabular"> <table id="TBL-5" class="tabular" 
 
><colgroup id="TBL-5-1g"><col 
id="TBL-5-1" /><col 
id="TBL-5-2" /></colgroup><tr  
 style="vertical-align:baseline;" id="TBL-5-1-"><td  style="white-space:normal; text-align:left;" id="TBL-5-1-1"  
class="td11"><!--l. 5070--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">BootKicker</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-1-2"  
class="td11"><!--l. 5071--><p class="noindent" >Enter Apple BootPicker menu (exclusive for Macs with compatible GPUs).                      </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-2-"><td  style="white-space:normal; text-align:left;" id="TBL-5-2-1"  
class="td11"><!--l. 5072--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">ChipTune</tspan></a><tspan class="ec-lmbx-10">*</tspan>             </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-2-2"  
class="td11"><!--l. 5073--><p class="noindent" >Test BeepGen protocol and generate audio signals of different style and length.                </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-3-"><td  style="white-space:normal; text-align:left;" id="TBL-5-3-1"  
class="td11"><!--l. 5074--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">CleanNvram</tspan></a><tspan class="ec-lmbx-10">*</tspan>          </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-3-2"  
class="td11"><!--l. 5075--><p class="noindent" >Reset NVRAM alternative bundled as a standalone tool.                                              </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-4-"><td  style="white-space:normal; text-align:left;" id="TBL-5-4-1"  
class="td11"><!--l. 5076--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">GopStop</tspan></a><tspan class="ec-lmbx-10">*</tspan>              </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-4-2"  
class="td11"><!--l. 5077--><p class="noindent" >Test GraphicsOutput protocol with a <a 
href="https://github.com/acidanthera/OpenCorePkg/tree/master/Application/GopStop" >simple scenario</a>.                                                  </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-5-"><td  style="white-space:normal; text-align:left;" id="TBL-5-5-1"  
class="td11"><!--l. 5079--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">HdaCodecDump</tspan></a><tspan class="ec-lmbx-10">*</tspan>       </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-5-2"  
class="td11"><!--l. 5080--><p class="noindent" >Parse and dump High Definition Audio codec information (requires <tspan class="ec-lmtt-10">AudioDxe</tspan>).                </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-6-"><td  style="white-space:normal; text-align:left;" id="TBL-5-6-1"  
class="td11"><!--l. 5081--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">KeyTester</tspan></a><tspan class="ec-lmbx-10">*</tspan>            </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-6-2"  
class="td11"><!--l. 5082--><p class="noindent" >Test keyboard input in <tspan class="ec-lmtt-10">SimpleText </tspan>mode.                                                                 </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-7-"><td  style="white-space:normal; text-align:left;" id="TBL-5-7-1"  
class="td11"><!--l. 5083--><p class="noindent" ><a 
href="https://www.memtest86.com" ><tspan class="ec-lmtt-10">MemTest86</tspan></a>          </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-7-2"  
class="td11"><!--l. 5084--><p class="noindent" >Memory testing utility.                                                                                          </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-8-"><td  style="white-space:normal; text-align:left;" id="TBL-5-8-1"  
class="td11"><!--l. 5085--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">OpenControl</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-8-2"  
class="td11"><!--l. 5086--><p class="noindent" >Unlock and lock back NVRAM protection for other tools to be able to get full NVRAM
access when launching from OpenCore.                                                                     </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-9-"><td  style="white-space:normal; text-align:left;" id="TBL-5-9-1"  
class="td11"><!--l. 5088--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">OpenShell</tspan></a><tspan class="ec-lmbx-10">*</tspan>            </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-9-2"  
class="td11"><!--l. 5089--><p class="noindent" >OpenCore-configured <a 
href="http://github.com/tianocore/edk2" ><tspan class="ec-lmtt-10">UEFI Shell</tspan></a> for compatibility with a broad range of firmwares.         </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-10-"><td  style="white-space:normal; text-align:left;" id="TBL-5-10-1"  
class="td11"><!--l. 5091--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">PavpProvision</tspan></a>      </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-10-2"  
class="td11"><!--l. 5092--><p class="noindent" >Perform EPID provisioning (requires certificate data configuration).                               </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-11-"><td  style="white-space:normal; text-align:left;" id="TBL-5-11-1"  
class="td11"><!--l. 5093--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">ResetSystem</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-11-2"  
class="td11"><!--l. 5094--><p class="noindent" >Utility to perform system reset. Takes reset type as an argument: <tspan class="ec-lmtt-10">ColdReset</tspan>, <tspan class="ec-lmtt-10">Firmware</tspan>,
<tspan class="ec-lmtt-10">Shutdown</tspan>, <tspan class="ec-lmtt-10">WarmReset</tspan>. Defaults to <tspan class="ec-lmtt-10">ColdReset</tspan>.                                                           </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-12-"><td  style="white-space:normal; text-align:left;" id="TBL-5-12-1"  
class="td11"><!--l. 5097--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">RtcRw</tspan></a><tspan class="ec-lmbx-10">*</tspan>                 </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-12-2"  
class="td11"><!--l. 5098--><p class="noindent" >Utility to read and write RTC (CMOS) memory.                                                        </p></td>
</tr><tr  
 style="vertical-align:baseline;" id="TBL-5-13-"><td  style="white-space:normal; text-align:left;" id="TBL-5-13-1"  
class="td11"><!--l. 5099--><p class="noindent" ><a 
href="https://github.com/acidanthera/OpenCorePkg" ><tspan class="ec-lmtt-10">VerifyMsrE2</tspan></a><tspan class="ec-lmbx-10">*</tspan>         </p></td><td  style="white-space:normal; text-align:left;" id="TBL-5-13-2"  
class="td11"><!--l. 5100--><p class="noindent" >Check <tspan class="ec-lmtt-10">CFG Lock </tspan>(MSR <tspan class="ec-lmtt-10">0xE2 </tspan>write protection) consistency across all cores.                      </p></td>
</tr></table></div>
<a 
 id="x1-62005r65"></a>
<h4 class="subsectionHead"><span class="titlemark">11.4   </span> <a 
 id="x1-630004"></a>OpenCanopy</h4>
<!--l. 5105--><p class="noindent" >OpenCanopy is a graphical OpenCore user interface that runs in <tspan class="ec-lmtt-10">External PickerMode </tspan>and relies on <a 
href="https://github.com/acidanthera/OpenCorePkg" >OpenCorePkg</a>
<tspan class="ec-lmtt-10">OcBootManagementLib </tspan>similar to the builtin text interface.
</p><!--l. 5110--><p class="noindent" >OpenCanopy requires graphical resources located in <tspan class="ec-lmtt-10">Resources </tspan>directory to run. Sample resources (fonts and
images) can be found in <a 
href="https://github.com/acidanthera/OcBinaryData" >OcBinaryData repository</a>. Customised icons can be found over the internet (e.g. <a 
href="https://github.com/blackosx/OpenCanopyIcons" >here</a> or
<a 
href="https://applelife.ru/threads/kastomizacija-opencanopy.2945020/" >there</a>).
</p><!--l. 5115--><p class="noindent" >OpenCanopy provides full support for <tspan class="ec-lmtt-10">PickerAttributes </tspan>and offers a configurable builtin icon set. The default chosen icon set
depends on the <tspan class="ec-lmtt-10">DefaultBackgroundColor </tspan>variable value. For Light Gray <tspan class="ec-lmtt-10">Old </tspan>icon set will be used, for other colours — the one
without a prefix.
</p><!--l. 5120--><p class="noindent" >Predefined icons are put to <tspan class="ec-lmtt-10">\EFI\OC\Resources\Image </tspan>directory. Full list of supported icons (in <tspan class="ec-lmtt-10">.icns </tspan>format) is provided
below. Missing optional icons will use the closest available icon. External entries will use <tspan class="ec-lmtt-10">Ext</tspan>-prefixed icon if available (e.g.
<tspan class="ec-lmtt-10">OldExtHardDrive.icns</tspan>).
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">Cursor </tspan>— Mouse cursor (mandatory).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Selected </tspan>— Selected item (mandatory).
                                                                                                  
                                                                                                  
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Selector </tspan>— Selecting item (mandatory).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">HardDrive </tspan>— Generic OS (mandatory).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Apple </tspan>— Apple OS.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AppleRecv </tspan>— Apple Recovery OS.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AppleTM </tspan>— Apple Time Machine.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Windows </tspan>— Windows.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Other </tspan>— Custom entry (see <tspan class="ec-lmtt-10">Entries</tspan>).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">ResetNVRAM </tspan>— Reset NVRAM system action or tool.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Shell </tspan>— Entry with UEFI Shell name (e.g. <tspan class="ec-lmtt-10">OpenShell</tspan>).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Tool </tspan>— Any other tool.</li></ul>
<!--l. 5141--><p class="noindent" >Predefined labels are put to <tspan class="ec-lmtt-10">\EFI\OC\Resources\Label </tspan>directory. Each label has <tspan class="ec-lmtt-10">.lbl </tspan>or <tspan class="ec-lmtt-10">.l2x </tspan>suffix to represent the scaling
level. Full list of labels is provided below. All labels are mandatory.
</p>
     <ul class="itemize1">
     <li class="itemize"><tspan class="ec-lmtt-10">EFIBoot </tspan>— Generic OS.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Apple </tspan>— Apple OS.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AppleRecv </tspan>— Apple Recovery OS.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">AppleTM </tspan>— Apple Time Machine.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Windows </tspan>— Windows.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Other </tspan>— Custom entry (see <tspan class="ec-lmtt-10">Entries</tspan>).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">ResetNVRAM </tspan>— Reset NVRAM system action or tool.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Shell </tspan>— Entry with UEFI Shell name (e.g. <tspan class="ec-lmtt-10">OpenShell</tspan>).
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">Tool </tspan>— Any other tool.</li></ul>
<!--l. 5158--><p class="noindent" >Label and icon generation can be performed with bundled utilities: <tspan class="ec-lmtt-10">disklabel </tspan>and <tspan class="ec-lmtt-10">icnspack</tspan>. Please refer to sample data for
the details about the dimensions. Font is Helvetica 12 pt times scale factor.
</p><!--l. 5162--><p class="noindent" >Font format corresponds to <a 
href="https://www.angelcode.com/products/bmfont" >AngelCode binary BMF</a>. While there are many utilities to generate font files, currently it is
recommended to use <a 
href="https://github.com/danpla/dpfontbaker" >dpFontBaker</a> to generate bitmap font (<a 
href="https://github.com/danpla/dpfontbaker/pull/1" >using CoreText produces best results</a>) and <a 
href="https://github.com/usr-sse2/fonverter" >fonverter</a> to export it to
binary format.
<a 
 id="x1-63001r67"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">11.5   </span> <a 
 id="x1-640005"></a>OpenRuntime</h4>
<!--l. 5170--><p class="noindent" ><tspan class="ec-lmtt-10">OpenRuntime </tspan>is an OpenCore plugin implementing <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol. This protocol implements multiple features
required for OpenCore that are otherwise not possible to implement in OpenCore itself as they are needed to work in runtime,
i.e. during operating system functioning. Feature highlights:
</p>
     <ul class="itemize1">
                                                                                                  
                                                                                                  
     <li class="itemize">NVRAM   namespaces,   allowing   to   isolate   operating   systems   from   accessing   select   variables   (e.g.
     <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>or <tspan class="ec-lmtt-10">ProtectSecureBoot</tspan>).
     </li>
     <li class="itemize">Read-only and write-only NVRAM variables, enhancing the security of OpenCore, Lilu, and Lilu plugins, like
     VirtualSMC, which implements <tspan class="ec-lmtt-10">AuthRestart </tspan>support.
     </li>
     <li class="itemize">NVRAM isolation, allowing to protect all variables from being written from an untrusted operating system (e.g.
     <tspan class="ec-lmtt-10">DisableVariableWrite</tspan>).
     </li>
     <li class="itemize">UEFI   Runtime   Services   memory   protection   management   to   workaround   read-only   mapping   (e.g.
     <tspan class="ec-lmtt-10">EnableWriteUnprotector</tspan>).</li></ul>
<a 
 id="x1-64001r68"></a>
<h4 class="subsectionHead"><span class="titlemark">11.6   </span> <a 
 id="x1-650006"></a>Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-65002x1"><tspan class="ec-lmtt-10">APFS</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Provide APFS support as configured in <a 
href="#x1-660007">APFS Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-65004x2"><tspan class="ec-lmtt-10">Audio</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Configure audio backend support described in <a 
href="#x1-670008">Audio Properties</a> section below.
     <!--l. 5203--><p class="noindent" >Audio support provides a way for upstream protocols to interact with the selected hardware and audio resources.
     All audio resources should reside in <tspan class="ec-lmtt-10">\EFI\OC\Resources\Audio </tspan>directory. Currently the only supported audio
     file format is WAVE PCM. While it is driver-dependent which audio stream format is supported, most common
     audio cards support 16-bit signed stereo audio at 44100 or 48000 Hz.
     </p><!--l. 5210--><p class="noindent" >Audio file path is determined by audio type, audio localisation, and audio path. Each filename looks as follows:
     <tspan class="ec-lmtt-10">[audio type]_[audio localisation]_[audio path].wav</tspan>. For unlocalised files filename does not include the
     language code and looks as follows: <tspan class="ec-lmtt-10">[audio type]_[audio path].wav</tspan>.
</p>
         <ul class="itemize1">
         <li class="itemize">Audio type can be <tspan class="ec-lmtt-10">OCEFIAudio </tspan>for OpenCore audio files or <tspan class="ec-lmtt-10">AXEFIAudio </tspan>for macOS bootloader audio files.
         </li>
         <li class="itemize">Audio localisation is a two letter language code (e.g. <tspan class="ec-lmtt-10">en</tspan>) with an exception for Chinese, Spanish, and
         Portuguese. Refer to <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleVoiceOver.h" ><tspan class="ec-lmtt-10">APPLE_VOICE_OVER_LANGUAGE_CODE </tspan>definition</a> for the list of all supported localisations.
         </li>
         <li class="itemize">Audio path is the base filename corresponding to a file identifier. For macOS bootloader audio paths refer to
         <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Apple/Protocol/AppleVoiceOver.h" ><tspan class="ec-lmtt-10">APPLE_VOICE_OVER_AUDIO_FILE </tspan>definition</a>. For OpenCore audio paths refer to <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Acidanthera/Protocol/OcAudio.h" ><tspan class="ec-lmtt-10">OC_VOICE_OVER_AUDIO_FILE</tspan>
         definition</a>. The only exception is OpenCore boot chime file, which is <tspan class="ec-lmtt-10">OCEFIAudio_VoiceOver_Boot.wav</tspan>.</li></ul>
     <!--l. 5230--><p class="noindent" >Audio localisation is determined separately for macOS bootloader and OpenCore. For macOS bootloader it is set in
     <tspan class="ec-lmtt-10">preferences.efires </tspan>archive in <tspan class="ec-lmtt-10">systemLanguage.utf8 </tspan>file and is controlled by the operating system. For
     OpenCore the value of <tspan class="ec-lmtt-10">prev-lang:kbd </tspan>variable is used. When native audio localisation of a particular file is
     missing, English language (<tspan class="ec-lmtt-10">en</tspan>) localisation is used. Sample audio files can be found in <a 
href="https://github.com/acidanthera/OcBinaryData" >OcBinaryData
     repository</a>.
     </p></li>
     <li 
  class="enumerate" id="x1-65006x3"><tspan class="ec-lmtt-10">ConnectDrivers</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Perform UEFI controller connection after driver loading.
     <!--l. 5244--><p class="noindent" >This option is useful for loading drivers following UEFI driver model as they may not start by themselves. Examples of
                                                                                                  
                                                                                                  
     such drivers are filesystem or audio drivers. While effective, this option may not be necessary for drivers performing
     automatic connection, and may slightly slowdown the boot.
     </p><!--l. 5249--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some firmwares, made by Apple in particular, only connect the boot drive to speed up the boot process. Enable
     this option to be able to see all the boot options when having multiple drives.
     </p></li>
     <li 
  class="enumerate" id="x1-65008x4"><tspan class="ec-lmtt-10">Drivers</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load selected drivers from <tspan class="ec-lmtt-10">OC/Drivers </tspan>directory.
     <!--l. 5260--><p class="noindent" >Designed to be filled with string filenames meant to be loaded as UEFI drivers.
     </p></li>
     <li 
  class="enumerate" id="x1-65010x5"><tspan class="ec-lmtt-10">Input</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual settings designed for input (keyboard and mouse) in <a 
href="#x1-680009">Input Properties</a> section
     below.
     </li>
     <li 
  class="enumerate" id="x1-65012x6"><tspan class="ec-lmtt-10">Output</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual settings designed for output (text and graphics) in <a 
href="#x1-6900010">Output Properties</a> section
     below.
     </li>
     <li 
  class="enumerate" id="x1-65014x7"><tspan class="ec-lmtt-10">ProtocolOverrides</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Force builtin versions of select protocols described in <a 
href="#x1-7000011">ProtocolOverrides Properties</a> section
     below.
     <!--l. 5284--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: all protocol instances are installed prior to driver loading.
     </p></li>
     <li 
  class="enumerate" id="x1-65016x8"><tspan class="ec-lmtt-10">Quirks</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: None<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Apply individual firmware quirks described in <a 
href="#x1-7100012">Quirks Properties</a> section below.
     </li>
     <li 
  class="enumerate" id="x1-65018x9"><tspan class="ec-lmtt-10">ReservedMemory</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> array</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Designed to be filled with <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> dict </tspan>values, describing memory areas exquisite to particular firmware
     and hardware functioning, which should not be used by the operating system. An example of such memory region could
     be second 256 MB corrupted by Intel HD 3000 or an area with faulty RAM. See <a 
href="#x1-7200013">ReservedMemory Properties</a> section
     below.
     </li></ol>
<a 
 id="x1-65019r69"></a>
<h4 class="subsectionHead"><span class="titlemark">11.7   </span> <a 
 id="x1-660007"></a>APFS Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-66002x1"><tspan class="ec-lmtt-10">EnableJumpstart</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load embedded APFS drivers from APFS containers.
     <!--l. 5314--><p class="noindent" >APFS EFI driver is bundled in all bootable APFS containers. This option performs loading of signed APFS
     drivers with respect to <tspan class="ec-lmtt-10">ScanPolicy</tspan>. See more details in “EFI Jumpstart” section of <a 
href="https://developer.apple.com/support/apple-file-system/Apple-File-System-Reference.pdf" >Apple File System Reference</a>.
                                                                                                  
                                                                                                  
     </p></li>
     <li 
  class="enumerate" id="x1-66004x2"><tspan class="ec-lmtt-10">GlobalConnect</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Perform full device connection during APFS loading.
     <!--l. 5326--><p class="noindent" >Instead  of  partition  handle  connection  normally  used  for  APFS  driver  loading  every  handle  is  connected
     recursively. This may take more time than usual but can be the only way to access APFS partitions on some
     firmwares like those found on older HP laptops.
     </p></li>
     <li 
  class="enumerate" id="x1-66006x3"><tspan class="ec-lmtt-10">HideVerbose</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Hide verbose output from APFS driver.
     <!--l. 5337--><p class="noindent" >APFS verbose output can be useful for debugging.
     </p></li>
     <li 
  class="enumerate" id="x1-66008x4"><tspan class="ec-lmtt-10">JumpstartHotPlug</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Load APFS drivers for newly connected devices.
     <!--l. 5345--><p class="noindent" >Performs APFS driver loading not only at OpenCore startup but also during boot picker. This permits APFS
     USB hot plug. Disable if not required.
     </p></li>
     <li 
  class="enumerate" id="x1-66010x5"><tspan class="ec-lmtt-10">MinDate</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Minimal allowed APFS driver date.
     <!--l. 5355--><p class="noindent" >APFS driver date connects APFS driver with the calendar release date. Older versions of APFS drivers may
     contain unpatched vulnerabilities, which can be used to inflict harm to the computer. This option permits
     restricting APFS drivers to only recent releases.
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— require the default supported release date of APFS in OpenCore. The default release date will increase
         with time and thus this setting is recommended. Currently set to 2018/06/21.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-1 </tspan>— permit any release date to load (strongly discouraged).
         </li>
         <li class="itemize">Other — use custom minimal APFS release date, e.g. <tspan class="ec-lmtt-10">20200401 </tspan>for 2020/04/01. APFS release dates can be
         found in OpenCore boot log and <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Acidanthera/Library/OcApfsLib.h" ><tspan class="ec-lmtt-10">OcApfsLib</tspan></a>.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-66012x6"><tspan class="ec-lmtt-10">MinVersion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Minimal allowed APFS driver version.
     <!--l. 5377--><p class="noindent" >APFS driver version connects APFS driver with the macOS release. APFS drivers from older macOS
     releases will become unsupported and thus may contain unpatched vulnerabilities, which can be used
     to inflict harm to the computer. This option permits restricting APFS drivers to only modern macOS
     versions.
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">0 </tspan>— require the default supported version of APFS in OpenCore. The default version will increase with
         time and thus this setting is recommended. Currently set to the latest point release from High Sierra from
         App Store (<tspan class="ec-lmtt-10">748077008000000</tspan>).
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">-1 </tspan>— permit any version to load (strongly discouraged).
         </li>
         <li class="itemize">Other — use custom minimal APFS version, e.g. <tspan class="ec-lmtt-10">1412101001000000 </tspan>from macOS Catalina 10.15.4. APFS
         versions can be found in OpenCore boot log and <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Include/Acidanthera/Library/OcApfsLib.h" ><tspan class="ec-lmtt-10">OcApfsLib</tspan></a>.</li></ul>
     </li></ol>
<a 
 id="x1-66013r70"></a>
<h4 class="subsectionHead"><span class="titlemark">11.8   </span> <a 
 id="x1-670008"></a>Audio Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-67002x1"><tspan class="ec-lmtt-10">AudioCodec</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Codec address on the specified audio controller for audio support.
     <!--l. 5408--><p class="noindent" >Normally this contains first audio codec address on the builtin analog audio controller (<tspan class="ec-lmtt-10">HDEF</tspan>). Audio codec
     addresses, e.g. <tspan class="ec-lmtt-10">2</tspan>, can be found in the debug log (marked in bold-italic):
     </p><!--l. 5411--><p class="noindent" ><tspan class="ec-lmtt-10">OCAU: 1/3 PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)/VenMsg(&#x003C;redacted&#x003E;,</tspan><tspan class="ec-lmtko-10">00000000</tspan><tspan class="ec-lmtt-10">) (4 outputs)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 2/3 PciRoot(0x0)/Pci(0x3,0x0)/VenMsg(&#x003C;redacted&#x003E;,</tspan><tspan class="ec-lmtko-10">00000000</tspan><tspan class="ec-lmtt-10">) (1 outputs)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 3/3 PciRoot(0x0)/Pci(0x1B,0x0)/VenMsg(&#x003C;redacted&#x003E;,</tspan><tspan class="ec-lmtko-10">02000000</tspan><tspan class="ec-lmtt-10">) (7 outputs)</tspan>
     </p><!--l. 5415--><p class="noindent" >As an alternative this value can be obtained from <tspan class="ec-lmtt-10">IOHDACodecDevice </tspan>class in I/O Registry containing it in
     <tspan class="ec-lmtt-10">IOHDACodecAddress </tspan>field.
     </p></li>
     <li 
  class="enumerate" id="x1-67004x2"><tspan class="ec-lmtt-10">AudioDevice</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Device path of the specified audio controller for audio support.
     <!--l. 5424--><p class="noindent" >Normally this contains builtin analog audio controller (<tspan class="ec-lmtt-10">HDEF</tspan>) device path, e.g. <tspan class="ec-lmtt-10">PciRoot(0x0)/Pci(0x1b,0x0)</tspan>.
     The list of recognised audio controllers can be found in the debug log (marked in bold-italic):
     </p><!--l. 5428--><p class="noindent" ><tspan class="ec-lmtt-10">OCAU: 1/3 </tspan><tspan class="ec-lmtko-10">PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)</tspan><tspan class="ec-lmtt-10">/VenMsg(&#x003C;redacted&#x003E;,00000000) (4 outputs)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 2/3 </tspan><tspan class="ec-lmtko-10">PciRoot(0x0)/Pci(0x3,0x0)</tspan><tspan class="ec-lmtt-10">/VenMsg(&#x003C;redacted&#x003E;,00000000) (1 outputs)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 3/3 </tspan><tspan class="ec-lmtko-10">PciRoot(0x0)/Pci(0x1B,0x0)</tspan><tspan class="ec-lmtt-10">/VenMsg(&#x003C;redacted&#x003E;,02000000) (7 outputs)</tspan>
     </p><!--l. 5432--><p class="noindent" >As an alternative <tspan class="ec-lmtt-10">gfxutil -f HDEF </tspan>command can be used in macOS. Specifying empty device path will result
     in the first available audio controller to be used.
     </p></li>
     <li 
  class="enumerate" id="x1-67006x3"><tspan class="ec-lmtt-10">AudioOut</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Index of the output port of the specified codec starting from 0.
     <!--l. 5441--><p class="noindent" >Normally this contains the index of the green out of the builtin analog audio controller (<tspan class="ec-lmtt-10">HDEF</tspan>). The number of
     output nodes (<tspan class="ec-lmtt-10">N</tspan>) in the debug log (marked in bold-italic):
     </p><!--l. 5444--><p class="noindent" ><tspan class="ec-lmtt-10">OCAU: 1/3 PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x1)/VenMsg(&#x003C;redacted&#x003E;,00000000) (</tspan><tspan class="ec-lmtko-10">4 outputs</tspan><tspan class="ec-lmtt-10">)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 2/3 PciRoot(0x0)/Pci(0x3,0x0)/VenMsg(&#x003C;redacted&#x003E;,00000000) (</tspan><tspan class="ec-lmtko-10">1 outputs</tspan><tspan class="ec-lmtt-10">)</tspan><br 
class="newline" /><tspan class="ec-lmtt-10">OCAU: 3/3 PciRoot(0x0)/Pci(0x1B,0x0)/VenMsg(&#x003C;redacted&#x003E;,02000000) (</tspan><tspan class="ec-lmtko-10">7 outputs</tspan><tspan class="ec-lmtt-10">)</tspan>
     </p><!--l. 5448--><p class="noindent" >The quickest way to find the right port is to bruteforce the values from <tspan class="ec-lmtt-10">0 </tspan>to <tspan class="ec-lmtt-10">N - 1</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-67008x4"><tspan class="ec-lmtt-10">AudioSupport</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Activate audio support by connecting to a backend driver.
     <!--l. 5456--><p class="noindent" >Enabling this setting routes audio playback from builtin protocols to a dedicated audio port (<tspan class="ec-lmtt-10">AudioOut</tspan>) of the
                                                                                                  
                                                                                                  
     specified codec (<tspan class="ec-lmtt-10">AudioCodec</tspan>) located on the audio controller (<tspan class="ec-lmtt-10">AudioDevice</tspan>).
     </p></li>
     <li 
  class="enumerate" id="x1-67010x5"><tspan class="ec-lmtt-10">MinimumVolume</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Minimal heard volume level from <tspan class="ec-lmtt-10">0 </tspan>to <tspan class="ec-lmtt-10">100</tspan>.
     <!--l. 5466--><p class="noindent" >Screen reader will use this volume level, when the calculated volume level is less than <tspan class="ec-lmtt-10">MinimumVolume</tspan>. Boot
     chime sound will not play if the calculated volume level is less than <tspan class="ec-lmtt-10">MinimumVolume</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-67012x6"><tspan class="ec-lmtt-10">PlayChime</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Play chime sound at startup.
     <!--l. 5476--><p class="noindent" >Enabling  this  setting  plays  boot  chime  through  builtin  audio  support.  Volume  level  is  determined  by
     <tspan class="ec-lmtt-10">MinimumVolume </tspan>and <tspan class="ec-lmtt-10">VolumeAmplifier </tspan>settings and <tspan class="ec-lmtt-10">SystemAudioVolume </tspan>NVRAM variable.
     </p><!--l. 5480--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: this setting is separate from <tspan class="ec-lmtt-10">StartupMute </tspan>NVRAM variable to avoid conflicts when the firmware is able
     to play boot chime.
     </p></li>
     <li 
  class="enumerate" id="x1-67014x7"><tspan class="ec-lmtt-10">VolumeAmplifier</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Multiplication coefficient for system volume to raw volume linear translation from <tspan class="ec-lmtt-10">0 </tspan>to <tspan class="ec-lmtt-10">1000</tspan>.
     <!--l. 5490--><p class="noindent" >Volume level range read from <tspan class="ec-lmtt-10">SystemAudioVolume </tspan>varies depending on the codec. To transform read
     value in <tspan class="ec-lmtt-10">[0, 127] </tspan>range into raw volume range <tspan class="ec-lmtt-10">[0, 100] </tspan>the read value is scaled to <tspan class="ec-lmtt-10">VolumeAmplifier</tspan>
     percents:
     </p><table 
class="align-star">
                 <tr><td 
class="align-odd"><tspan class="lmmi-10">RawV olume</tspan></td>                 <td 
class="align-even"> <tspan class="rm-lmr-10">= </tspan><tspan class="lmmi-10">MIN</tspan><tspan class="rm-lmr-10">(</tspan><img 
src="Configuration3x.png" alt="SystemAudioV  olume ∗ VolumeAmplif ier
------------------------------------
                100"  class="frac" align="middle" /><tspan class="lmmi-10">,</tspan><tspan class="rm-lmr-10">100)</tspan></td>                 <td 
class="align-label"></td>                 <td 
class="align-label"></td></tr></table>
     <!--l. 5496--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: the transformation used in macOS is not linear, but it is very close and this nuance is thus ignored.
</p>
     </li></ol>
<a 
 id="x1-67015r71"></a>
<h4 class="subsectionHead"><span class="titlemark">11.9   </span> <a 
 id="x1-680009"></a>Input Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-68002x1"><tspan class="ec-lmtt-10">KeyFiltering</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable keyboard input sanity checking.
     <!--l. 5511--><p class="noindent" >Apparently  some  boards  like  GA  Z77P-D3  may  return  uninitialised  data  in  <tspan class="ec-lmtt-10">EFI_INPUT_KEY </tspan>with  all  input
     protocols. This option discards keys that are neither ASCII, nor are defined in the UEFI specification (see tables
     107 and 108 in version 2.8).
     </p></li>
     <li 
  class="enumerate" id="x1-68004x2"><tspan class="ec-lmtt-10">KeyForgetThreshold</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Remove key unless it was submitted during this timeout in milliseconds.
     <!--l. 5522--><p class="noindent" ><tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>protocol is supposed to contain a fixed length buffer of currently pressed keys. However,
     the majority of the drivers only report key presses as interrupts and pressing and holding the key on the keyboard
     results in subsequent submissions of this key with some defined time interval. As a result we use a timeout to
     remove once pressed keys from the buffer once the timeout expires and no new submission of this key happened.
     </p><!--l. 5529--><p class="noindent" >This option allows to set this timeout based on the platform. The recommended value that works on the majority
     of the platforms is <tspan class="ec-lmtt-10">5 </tspan>milliseconds. For reference, holding one key on VMware will repeat it roughly every <tspan class="ec-lmtt-10">2</tspan>
     milliseconds and the same value for APTIO V is <tspan class="ec-lmtt-10">3-4 </tspan>milliseconds. Thus it is possible to set a slightly lower value
     on faster platforms and slightly higher value on slower platforms for more responsive input.
     </p><!--l. 5536--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some platforms may require different values, higher or lower. For example, when detecting key misses in
     OpenCanopy try increasing this value (e.g. to <tspan class="ec-lmtt-10">10</tspan>), and when detecting key stall, try decreasing this value. Since
     every platform is different it may be reasonable to check every value from <tspan class="ec-lmtt-10">1 </tspan>to <tspan class="ec-lmtt-10">25</tspan>.
     </p></li>
     <li 
  class="enumerate" id="x1-68006x3"><tspan class="ec-lmtt-10">KeyMergeThreshold</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Assume simultaneous combination for keys submitted within this timeout in milliseconds.
     <!--l. 5549--><p class="noindent" >Similarly to <tspan class="ec-lmtt-10">KeyForgetThreshold</tspan>, this option works around the sequential nature of key submission. To be able
     to recognise simultaneously pressed keys in the situation when all keys arrive sequentially, we are required to set
     a timeout within which we assume the keys were pressed together.
     </p><!--l. 5554--><p class="noindent" >Holding multiple keys results in reports every <tspan class="ec-lmtt-10">2 </tspan>and <tspan class="ec-lmtt-10">1 </tspan>milliseconds for VMware and APTIO V respectively.
     Pressing keys one after the other results in delays of at least <tspan class="ec-lmtt-10">6 </tspan>and <tspan class="ec-lmtt-10">10 </tspan>milliseconds for the same platforms. The
     recommended value for this option is <tspan class="ec-lmtt-10">2 </tspan>milliseconds, but it may be decreased for faster platforms and increased
     for slower.
     </p></li>
     <li 
  class="enumerate" id="x1-68008x4"><tspan class="ec-lmtt-10">KeySupport</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable internal keyboard input translation to <tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>protocol.
     <!--l. 5567--><p class="noindent" >This   option   activates   the   internal   keyboard   interceptor   driver,   based   on   <tspan class="ec-lmtt-10">AppleGenericInput  </tspan>aka
     (<tspan class="ec-lmtt-10">AptioInputFix</tspan>), to fill <tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>database for input functioning. In case a separate driver is
     used, such as <tspan class="ec-lmtt-10">OpenUsbKbDxe</tspan>, this option should never be enabled.
     </p></li>
     <li 
  class="enumerate" id="x1-68010x5"><tspan class="ec-lmtt-10">KeySupportMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Set internal keyboard input translation to <tspan class="ec-lmtt-10">AppleKeyMapAggregator </tspan>protocol mode.
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Auto </tspan>— Performs automatic choice as available with the following preference: <tspan class="ec-lmtt-10">AMI</tspan>, <tspan class="ec-lmtt-10">V2</tspan>, <tspan class="ec-lmtt-10">V1</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">V1 </tspan>— Uses UEFI standard legacy input protocol <tspan class="ec-lmtt-10">EFI_SIMPLE_TEXT_INPUT_PROTOCOL</tspan>.
                                                                                                  
                                                                                                  
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">V2 </tspan>— Uses UEFI standard modern input protocol <tspan class="ec-lmtt-10">EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">AMI </tspan>— Uses APTIO input protocol <tspan class="ec-lmtt-10">AMI_EFIKEYCODE_PROTOCOL</tspan>.</li></ul>
     <!--l. 5588--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Currently <tspan class="ec-lmtt-10">V1</tspan>, <tspan class="ec-lmtt-10">V2</tspan>, and <tspan class="ec-lmtt-10">AMI </tspan>unlike <tspan class="ec-lmtt-10">Auto </tspan>only do filtering of the particular specified protocol. This may change in the
     future versions.
     </p></li>
     <li 
  class="enumerate" id="x1-68012x6"><tspan class="ec-lmtt-10">KeySwap</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Swap <tspan class="ec-lmtt-10">Command </tspan>and <tspan class="ec-lmtt-10">Option </tspan>keys during submission.
     <!--l. 5597--><p class="noindent" >This option may be useful for keyboard layouts with <tspan class="ec-lmtt-10">Option </tspan>key situated to the right of <tspan class="ec-lmtt-10">Command </tspan>key.
     </p></li>
     <li 
  class="enumerate" id="x1-68014x7"><tspan class="ec-lmtt-10">PointerSupport</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Enable internal pointer driver.
     <!--l. 5606--><p class="noindent" >This option implements standard UEFI pointer protocol (<tspan class="ec-lmtt-10">EFI_SIMPLE_POINTER_PROTOCOL</tspan>) through select
     OEM protocols. The option may be useful on Z87 ASUS boards, where <tspan class="ec-lmtt-10">EFI_SIMPLE_POINTER_PROTOCOL </tspan>is
     broken.
     </p></li>
     <li 
  class="enumerate" id="x1-68016x8"><tspan class="ec-lmtt-10">PointerSupportMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Set OEM protocol used for internal pointer driver.
     <!--l. 5616--><p class="noindent" >Currently the only supported variant is <tspan class="ec-lmtt-10">ASUS</tspan>, using specialised protocol available on select Z87 and Z97 ASUS boards.
     More details can be found in <a 
href="https://github.com/LongSoft/UEFITool/pull/116" ><tspan class="ec-lmtt-10">LongSoft/UefiTool#116</tspan></a>.
     </p></li>
     <li 
  class="enumerate" id="x1-68018x9"><tspan class="ec-lmtt-10">TimerResolution</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Set architecture timer resolution.
     <!--l. 5626--><p class="noindent" >This option allows to update firmware architecture timer period with the specified value in <tspan class="ec-lmtt-10">100 </tspan>nanosecond
     units. Setting a lower value generally improves performance and responsiveness of the interface and input
     handling.
     </p><!--l. 5630--><p class="noindent" >The recommended value is <tspan class="ec-lmtt-10">50000 </tspan>(<tspan class="ec-lmtt-10">5 </tspan>milliseconds) or slightly higher. Select ASUS Z87 boards use <tspan class="ec-lmtt-10">60000 </tspan>for the interface.
     Apple boards use <tspan class="ec-lmtt-10">100000</tspan>. In case of issues, this option can be left as <tspan class="ec-lmtt-10">0</tspan>.
</p>
     </li></ol>
<a 
 id="x1-68019r72"></a>
<h4 class="subsectionHead"><span class="titlemark">11.10   </span> <a 
 id="x1-6900010"></a>Output Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-69002x1"><tspan class="ec-lmtt-10">TextRenderer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">BuiltinGraphics</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Chooses renderer for text going through standard console output.
     <!--l. 5647--><p class="noindent" >Currently two renderers are supported: <tspan class="ec-lmtt-10">Builtin </tspan>and <tspan class="ec-lmtt-10">System</tspan>. <tspan class="ec-lmtt-10">System </tspan>renderer uses firmware services for text
     rendering. <tspan class="ec-lmtt-10">Builtin </tspan>bypassing firmware services and performs text rendering on its own. Different renderers
     support a different set of options. It is recommended to use <tspan class="ec-lmtt-10">Builtin </tspan>renderer, as it supports HiDPI mode and
     uses full screen resolution.
                                                                                                  
                                                                                                  
     </p><!--l. 5654--><p class="noindent" >UEFI  firmwares  generally  support  <tspan class="ec-lmtt-10">ConsoleControl </tspan>with  two  rendering  modes:  <tspan class="ec-lmtt-10">Graphics </tspan>and  <tspan class="ec-lmtt-10">Text</tspan>.  Some
     firmwares do not support <tspan class="ec-lmtt-10">ConsoleControl </tspan>and rendering modes. OpenCore and macOS expect text to only be
     shown in <tspan class="ec-lmtt-10">Graphics </tspan>mode and graphics to be drawn in any mode. Since this is not required by UEFI specification,
     exact behaviour varies.
     </p><!--l. 5661--><p class="noindent" >Valid values are combinations of text renderer and rendering mode:
</p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">BuiltinGraphics </tspan>— Switch to <tspan class="ec-lmtt-10">Graphics </tspan>mode and use <tspan class="ec-lmtt-10">Builtin </tspan>renderer with custom <tspan class="ec-lmtt-10">ConsoleControl</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BuiltinText </tspan>— Switch to <tspan class="ec-lmtt-10">Text </tspan>mode and use <tspan class="ec-lmtt-10">Builtin </tspan>renderer with custom <tspan class="ec-lmtt-10">ConsoleControl</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">SystemGraphics </tspan>— Switch to <tspan class="ec-lmtt-10">Graphics </tspan>mode and use <tspan class="ec-lmtt-10">System </tspan>renderer with custom <tspan class="ec-lmtt-10">ConsoleControl</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">SystemText </tspan>— Switch to <tspan class="ec-lmtt-10">Text </tspan>mode and use <tspan class="ec-lmtt-10">System </tspan>renderer with custom <tspan class="ec-lmtt-10">ConsoleControl</tspan>.
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">SystemGeneric </tspan>— Use <tspan class="ec-lmtt-10">System </tspan>renderer with system <tspan class="ec-lmtt-10">ConsoleControl </tspan>assuming it behaves correctly.</li></ul>
     <!--l. 5681--><p class="noindent" >The use of <tspan class="ec-lmtt-10">BuiltinGraphics </tspan>is generally straightforward. For most platforms it is necessary to enable
     <tspan class="ec-lmtt-10">ProvideConsoleGop</tspan>, set <tspan class="ec-lmtt-10">Resolution </tspan>to <tspan class="ec-lmtt-10">Max</tspan>. <tspan class="ec-lmtt-10">BuiltinText </tspan>variant is an alternative <tspan class="ec-lmtt-10">BuiltinGraphics </tspan>for some very old
     and buggy laptop firmwares, which can only draw in <tspan class="ec-lmtt-10">Text </tspan>mode.
     </p><!--l. 5687--><p class="noindent" >The use of <tspan class="ec-lmtt-10">System </tspan>protocols is more complicated. In general the preferred setting is <tspan class="ec-lmtt-10">SystemGraphics </tspan>or <tspan class="ec-lmtt-10">SystemText</tspan>.
     Enabling <tspan class="ec-lmtt-10">ProvideConsoleGop</tspan>, setting <tspan class="ec-lmtt-10">Resolution </tspan>to <tspan class="ec-lmtt-10">Max</tspan>, enabling <tspan class="ec-lmtt-10">ReplaceTabWithSpace </tspan>is useful on almost all
     platforms. <tspan class="ec-lmtt-10">SanitiseClearScreen</tspan>, <tspan class="ec-lmtt-10">IgnoreTextInGraphics</tspan>, and <tspan class="ec-lmtt-10">ClearScreenOnModeSwitch </tspan>are more specific, and their
     use depends on the firmware.
     </p><!--l. 5695--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some Macs, namely <tspan class="ec-lmtt-10">MacPro5,1</tspan>, may have broken console output with newer GPUs, and thus only
     <tspan class="ec-lmtt-10">BuiltinGraphics </tspan>may work for them.
     </p></li>
     <li 
  class="enumerate" id="x1-69004x2"><tspan class="ec-lmtt-10">ConsoleMode</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets console output mode as specified with the <tspan class="ec-lmtt-10">WxH </tspan>(e.g. <tspan class="ec-lmtt-10">80x24</tspan>) formatted string.
     <!--l. 5706--><p class="noindent" >Set to empty string not to change console mode. Set to <tspan class="ec-lmtt-10">Max </tspan>to try to use largest available console mode. Currently
     <tspan class="ec-lmtt-10">Builtin </tspan>text renderer supports only one console mode, so this option is ignored.
     </p><!--l. 5711--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This field is best to be left empty on most firmwares.
     </p></li>
     <li 
  class="enumerate" id="x1-69006x3"><tspan class="ec-lmtt-10">Resolution</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Sets console output screen resolution.
         <ul class="itemize1">
         <li class="itemize">Set to <tspan class="ec-lmtt-10">WxH@Bpp </tspan>(e.g. <tspan class="ec-lmtt-10">1920x1080@32</tspan>) or <tspan class="ec-lmtt-10">WxH </tspan>(e.g. <tspan class="ec-lmtt-10">1920x1080</tspan>) formatted string to request custom resolution
         from GOP if available.
         </li>
         <li class="itemize">Set to empty string not to change screen resolution.
         </li>
         <li class="itemize">Set to <tspan class="ec-lmtt-10">Max </tspan>to try to use largest available screen resolution.</li></ul>
     <!--l. 5728--><p class="noindent" >On HiDPI screens <tspan class="ec-lmtt-10">APPLE_VENDOR_VARIABLE_GUID UIScale </tspan>NVRAM variable may need to be set to <tspan class="ec-lmtt-10">02 </tspan>to enable HiDPI
     scaling in <tspan class="ec-lmtt-10">Builtin </tspan>text renderer, FileVault 2 UEFI password interface, and boot screen logo. Refer to <a 
href="#x1-510004">Recommended
     Variables</a> section for more details.
     </p><!--l. 5734--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This will fail when console handle has no GOP protocol. When the firmware does not provide it, it can be added
     with <tspan class="ec-lmtt-10">ProvideConsoleGop </tspan>set to <tspan class="ec-lmtt-10">true</tspan>.
     </p></li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-69008x4"><tspan class="ec-lmtt-10">ClearScreenOnModeSwitch</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Some firmwares clear only part of screen when switching from graphics to text mode, leaving a fragment of
     previously drawn image visible. This option fills the entire graphics screen with black colour before switching to text
     mode.
     <!--l. 5747--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option only applies to <tspan class="ec-lmtt-10">System </tspan>renderer.
     </p></li>
     <li 
  class="enumerate" id="x1-69010x5"><tspan class="ec-lmtt-10">DirectGopRendering</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Use builtin graphics output protocol renderer for console.
     <!--l. 5755--><p class="noindent" >On some firmwares this may provide better performance or even fix rendering issues, like on <tspan class="ec-lmtt-10">MacPro5,1</tspan>. However, it is
     recommended not to use this option unless there is an obvious benefit as it may even result in slower
     scrolling.
     </p></li>
     <li 
  class="enumerate" id="x1-69012x6"><tspan class="ec-lmtt-10">IgnoreTextInGraphics</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Select firmwares output text onscreen in both graphics and text mode. This is normally unexpected,
     because random text may appear over graphical images and cause UI corruption. Setting this option to <tspan class="ec-lmtt-10">true </tspan>will discard
     all text output when console control is in mode different from <tspan class="ec-lmtt-10">Text</tspan>.
     <!--l. 5768--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option only applies to <tspan class="ec-lmtt-10">System </tspan>renderer.
     </p></li>
     <li 
  class="enumerate" id="x1-69014x7"><tspan class="ec-lmtt-10">ReplaceTabWithSpace</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Some firmwares do not print tab characters or even everything that follows them, causing difficulties or
     inability to use the UEFI Shell builtin text editor to edit property lists and other documents. This option makes the
     console output spaces instead of tabs.
     <!--l. 5779--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option only applies to <tspan class="ec-lmtt-10">System </tspan>renderer.
     </p></li>
     <li 
  class="enumerate" id="x1-69016x8"><tspan class="ec-lmtt-10">ProvideConsoleGop</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Ensure GOP (Graphics Output Protocol) on console handle.
     <!--l. 5787--><p class="noindent" >macOS bootloader requires GOP or UGA (for 10.4 EfiBoot) to be present on console handle, yet the exact location of the
     graphics protocol is not covered by the UEFI specification. This option will ensure GOP and UGA, if present, are
     available on the console handle.
     </p><!--l. 5792--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option will also replace broken GOP protocol on console handle, which may be the case on <tspan class="ec-lmtt-10">MacPro5,1 </tspan>with
     newer GPUs.
     </p></li>
     <li 
  class="enumerate" id="x1-69018x9"><tspan class="ec-lmtt-10">ReconnectOnResChange</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reconnect console controllers after changing screen resolution.
     <!--l. 5801--><p class="noindent" >On some firmwares when screen resolution is changed via GOP, it is required to reconnect the controllers, which
     produce the console protocols (simple text out). Otherwise they will not produce text based on the new
     resolution.
     </p><!--l. 5805--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: On several boards this logic may result in black screen when launching OpenCore from Shell and thus it is
     optional. In versions prior to 0.5.2 this option was mandatory and not configurable. Please do not use this unless
                                                                                                  
                                                                                                  
     required.
     </p></li>
     <li 
  class="enumerate" id="x1-69020x10"><tspan class="ec-lmtt-10">SanitiseClearScreen</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Some firmwares reset screen resolution to a failsafe value (like <tspan class="ec-lmtt-10">1024x768</tspan>) on the attempts to clear screen
     contents when large display (e.g. 2K or 4K) is used. This option attempts to apply a workaround.
     <!--l. 5818--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: This option only applies to <tspan class="ec-lmtt-10">System </tspan>renderer. On all known affected systems <tspan class="ec-lmtt-10">ConsoleMode </tspan>had to be set to empty
     string for this to work.
     </p></li>
     <li 
  class="enumerate" id="x1-69022x11"><tspan class="ec-lmtt-10">UgaPassThrough</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Provide UGA protocol instances on top of GOP protocol.
     <!--l. 5828--><p class="noindent" >Some firmwares do not implement legacy UGA protocol, but it may be required for screen output by older EFI
     applications like EfiBoot from 10.4.
</p>
     </li></ol>
<a 
 id="x1-69023r73"></a>
<h4 class="subsectionHead"><span class="titlemark">11.11   </span> <a 
 id="x1-7000011"></a>ProtocolOverrides Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-70002x1"><tspan class="ec-lmtt-10">AppleAudio</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple audio protocols with builtin versions.
     <!--l. 5845--><p class="noindent" >Apple audio protocols allow macOS bootloader and OpenCore to play sounds and signals for screen reading or
     audible error reporting. Supported protocols are beep generation and VoiceOver. VoiceOver protocol is specific to
     Gibraltar machines (T2) and is not supported before macOS High Sierra (10.13). Instead older macOS versions
     use AppleHDA protocol, which is currently not implemented.
     </p><!--l. 5852--><p class="noindent" >Only one set of audio protocols can be available at a time, so in order to get audio playback in OpenCore user
     interface on Mac system implementing some of these protocols this setting should be enabled.
     </p><!--l. 5856--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Backend audio driver needs to be configured in <tspan class="ec-lmtt-10">UEFI Audio </tspan>section for these protocols to be able to stream
     audio.
     </p></li>
     <li 
  class="enumerate" id="x1-70004x2"><tspan class="ec-lmtt-10">AppleBootPolicy</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Boot Policy protocol with a builtin version. This may be used to ensure APFS
     compatibility on VMs or legacy Macs.
     <!--l. 5866--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some Macs, namely <tspan class="ec-lmtt-10">MacPro5,1</tspan>, do have APFS compatibility, but their Apple Boot Policy protocol contains
     recovery detection issues, thus using this option is advised on them as well.
     </p></li>
     <li 
  class="enumerate" id="x1-70006x3"><tspan class="ec-lmtt-10">AppleDebugLog</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Debug Log protocol with a builtin version.
     </li>
     <li 
  class="enumerate" id="x1-70008x4"><tspan class="ec-lmtt-10">AppleEvent</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Event protocol with a builtin version. This may be used to ensure File Vault 2
     compatibility on VMs or legacy Macs.
     </li>
     <li 
  class="enumerate" id="x1-70010x5"><tspan class="ec-lmtt-10">AppleFramebufferInfo</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Framebuffer Info protocol with a builtin version. This may be used to override
     framebuffer information on VMs or legacy Macs to improve compatibility with legacy EfiBoot like the one in
     macOS 10.4.
     </li>
     <li 
  class="enumerate" id="x1-70012x6"><tspan class="ec-lmtt-10">AppleImageConversion</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Image Conversion protocol with a builtin version.
     </li>
     <li 
  class="enumerate" id="x1-70014x7"><tspan class="ec-lmtt-10">AppleImg4Verification</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple IMG4 Verification protocol with a builtin version. This protocol is used to verify
     <tspan class="ec-lmtt-10">im4m </tspan>manifest files used by Apple Secure Boot.
     </li>
     <li 
  class="enumerate" id="x1-70016x8"><tspan class="ec-lmtt-10">AppleKeyMap</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Key Map protocols with builtin versions.
     </li>
     <li 
  class="enumerate" id="x1-70018x9"><tspan class="ec-lmtt-10">AppleRtcRam</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple RTC RAM protocol with builtin version.
     <!--l. 5921--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Builtin version of Apple RTC RAM protocol may filter out I/O attempts to select RTC memory addresses.
     The list of addresses can be specified in <tspan class="ec-lmtt-10">4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:rtc-blacklist </tspan>variable as
     a data array.
     </p></li>
     <li 
  class="enumerate" id="x1-70020x10"><tspan class="ec-lmtt-10">AppleSecureBoot</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple Secure Boot protocol with a builtin version.
     </li>
     <li 
  class="enumerate" id="x1-70022x11"><tspan class="ec-lmtt-10">AppleSmcIo</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple SMC I/O protocol with a builtin version.
     <!--l. 5940--><p class="noindent" >This protocol replaces legacy <tspan class="ec-lmtt-10">VirtualSmc </tspan>UEFI driver, and is compatible with any SMC kernel extension.
     However, in case <tspan class="ec-lmtt-10">FakeSMC </tspan>kernel extension is used, manual NVRAM key variable addition may be needed.
     </p></li>
     <li 
  class="enumerate" id="x1-70024x12"><tspan class="ec-lmtt-10">AppleUserInterfaceTheme</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Apple User Interface Theme protocol with a builtin version.
     </li>
     <li 
  class="enumerate" id="x1-70026x13"><tspan class="ec-lmtt-10">DataHub</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Data Hub protocol with a builtin version. This will delete all previous properties if the
     protocol was already installed.
     </li>
     <li 
  class="enumerate" id="x1-70028x14"><tspan class="ec-lmtt-10">DeviceProperties</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Reinstalls Device Property protocol with a builtin version. This will delete all previous properties
     if it was already installed. This may be used to ensure full compatibility on VMs or legacy Macs.
     </li>
     <li 
  class="enumerate" id="x1-70030x15"><tspan class="ec-lmtt-10">FirmwareVolume</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forcibly wraps Firmware Volume protocols or installs new to support custom cursor images for
     File Vault 2. Should be set to <tspan class="ec-lmtt-10">true </tspan>to ensure File Vault 2 compatibility on everything but VMs and legacy Macs.
     <!--l. 5974--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Several virtual machines including VMware may have corrupted cursor image in HiDPI mode and thus
     may also require this setting to be enabled.
     </p></li>
     <li 
  class="enumerate" id="x1-70032x16"><tspan class="ec-lmtt-10">HashServices</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forcibly reinstalls Hash Services protocols with builtin versions. Should be set to <tspan class="ec-lmtt-10">true </tspan>to ensure
     File Vault 2 compatibility on platforms providing broken SHA-1 hashing. Can be diagnosed by invalid cursor
     size with <tspan class="ec-lmtt-10">UIScale </tspan>set to <tspan class="ec-lmtt-10">02</tspan>, in general platforms prior to APTIO V (Haswell and older) are affected.
     </li>
     <li 
  class="enumerate" id="x1-70034x17"><tspan class="ec-lmtt-10">OSInfo</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forcibly reinstalls OS Info protocol with builtin versions. This protocol is generally used to receive
     notifications from macOS bootloader, by the firmware or by other applications.
     </li>
     <li 
  class="enumerate" id="x1-70036x18"><tspan class="ec-lmtt-10">UnicodeCollation</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Forcibly reinstalls unicode collation services with builtin version. Should be set to <tspan class="ec-lmtt-10">true </tspan>to ensure
     UEFI Shell compatibility on platforms providing broken unicode collation. In general legacy Insyde and APTIO
     platforms on Ivy Bridge and earlier are affected.
     </li></ol>
<a 
 id="x1-70037r74"></a>
<h4 class="subsectionHead"><span class="titlemark">11.12   </span> <a 
 id="x1-7100012"></a>Quirks Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-71002x1"><tspan class="ec-lmtt-10">DeduplicateBootOrder</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Remove duplicate entries in <tspan class="ec-lmtt-10">BootOrder </tspan>variable in <tspan class="ec-lmtt-10">EFI_GLOBAL_VARIABLE_GUID</tspan>.
     <!--l. 6017--><p class="noindent" >This  quirk  requires  <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>to  be  enabled  and  therefore  <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol
     implemented in <tspan class="ec-lmtt-10">OpenRuntime.efi</tspan>.
     </p><!--l. 6020--><p class="noindent" >By redirecting <tspan class="ec-lmtt-10">Boot </tspan>prefixed variables to a separate GUID namespace with the help of <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>quirk we
     achieve multiple goals: </p>
         <ul class="itemize1">
                                                                                                  
                                                                                                  
         <li class="itemize">Operating systems are jailed and only controlled by OpenCore boot environment to enhance security.
         </li>
         <li class="itemize">Operating systems do not mess with OpenCore boot priority, and guarantee fluent updates and hibernation
         wakes for cases that require reboots with OpenCore in the middle.
         </li>
         <li class="itemize">Potentially incompatible boot entries, such as macOS entries, are not deleted or anyhow corrupted.</li></ul>
     <!--l. 6033--><p class="noindent" >However, some firmwares do their own boot option scanning upon startup by checking file presence on the available disks.
     Quite often this scanning includes non-standard locations, such as Windows Bootloader paths. Normally it
     is not an issue, but some firmwares, ASUS firmwares on APTIO V in particular, have bugs. For them
     scanning is implemented improperly, and firmware preferences may get accidentally corrupted due to
     <tspan class="ec-lmtt-10">BootOrder </tspan>entry duplication (each option will be added twice) making it impossible to boot without resetting
     NVRAM.
     </p><!--l. 6041--><p class="noindent" >To trigger the bug, some valid boot options (e.g. OpenCore) are required. Then install Windows with
     <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>enabled. As the Windows bootloader option will not be created by the Windows installer, the
     firmware will attempt to create this itself, leading to a corruption of its boot option list.
     </p><!--l. 6046--><p class="noindent" >This quirk removes all duplicates in <tspan class="ec-lmtt-10">BootOrder </tspan>variable attempting to resolve the consequences of the bugs upon
     OpenCore loading. It is recommended to use this key along with <tspan class="ec-lmtt-10">BootProtect </tspan>option.
     </p></li>
     <li 
  class="enumerate" id="x1-71004x2"><tspan class="ec-lmtt-10">ExitBootServicesDelay</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Adds delay in microseconds after <tspan class="ec-lmtt-10">EXIT_BOOT_SERVICES </tspan>event.
     <!--l. 6057--><p class="noindent" >This is a very ugly quirk to circumvent &#x0022;Still waiting for root device&#x0022; message on select APTIO IV firmwares, namely
     ASUS Z87-Pro, when using FileVault 2 in particular. It seems that for some reason they execute code in
     parallel to <tspan class="ec-lmtt-10">EXIT_BOOT_SERVICES</tspan>, which results in SATA controller being inaccessible from macOS. A
     better approach should be found in some future. Expect 3-5 seconds to be enough in case the quirk is
     needed.
     </p></li>
     <li 
  class="enumerate" id="x1-71006x3"><tspan class="ec-lmtt-10">IgnoreInvalidFlexRatio</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Select firmwares, namely APTIO IV, may contain invalid values in <tspan class="ec-lmtt-10">MSR_FLEX_RATIO </tspan>(<tspan class="ec-lmtt-10">0x194</tspan>) MSR register.
     These values may cause macOS boot failure on Intel platforms.
     <!--l. 6071--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: While the option is not supposed to induce harm on unaffected firmwares, its usage is not recommended when it is
     not required.
     </p></li>
     <li 
  class="enumerate" id="x1-71008x4"><tspan class="ec-lmtt-10">ReleaseUsbOwnership</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Attempt to detach USB controller ownership from the firmware driver. While most firmwares manage to
     properly do that, or at least have an option for, select firmwares do not. As a result, operating system may freeze upon
     boot. Not recommended unless required.
     </li>
     <li 
  class="enumerate" id="x1-71010x5"><tspan class="ec-lmtt-10">RequestBootVarRouting</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Request redirect of all <tspan class="ec-lmtt-10">Boot </tspan>prefixed variables from <tspan class="ec-lmtt-10">EFI_GLOBAL_VARIABLE_GUID </tspan>to <br 
class="newline" /><tspan class="ec-lmtt-10">OC_VENDOR_VARIABLE_GUID</tspan>.
     <!--l. 6090--><p class="noindent" >This quirk requires <tspan class="ec-lmtt-10">OC_FIRMWARE_RUNTIME </tspan>protocol implemented in <tspan class="ec-lmtt-10">OpenRuntime.efi</tspan>. The quirk lets default boot entry
     preservation at times when firmwares delete incompatible boot entries. Simply said, this quirk is required to
     reliably use <a 
href="https://support.apple.com/HT202796" >Startup Disk</a> preference pane in firmware that is not compatible with macOS boot entries by
     design.
                                                                                                  
                                                                                                  
     </p></li>
     <li 
  class="enumerate" id="x1-71012x6"><tspan class="ec-lmtt-10">TscSyncTimeout</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Attempts to perform TSC synchronisation with a specified timeout.
     <!--l. 6103--><p class="noindent" >The primary purpose of this quirk is to enable early bootstrap TSC synchronisation on some server and laptop models
     when running a debug XNU kernel. For the debug kernel the TSC needs to be kept in sync across the
     cores before any kext could kick in rendering all other solutions problematic. The timeout is specified in
     microseconds and depends on the amount of cores present on the platform, the recommended starting value is
     <tspan class="ec-lmtt-10">500000</tspan>.
     </p><!--l. 6109--><p class="noindent" >This is an experimental quirk, which should only be used for the aforementioned problem. In all other cases the quirk
     may render the operating system unstable and is not recommended. The recommended solution in the other cases is to
     install a kernel driver like <a 
href="https://github.com/RehabMan/VoodooTSCSync" >VoodooTSCSync</a>, <a 
href="https://github.com/interferenc/TSCAdjustReset" >TSCAdjustReset</a>, or <a 
href="https://github.com/lvs1974/CpuTscSync" >CpuTscSync</a> (a more specialised variant of
     VoodooTSCSync for newer laptops).
     </p><!--l. 6117--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The reason this quirk cannot replace the kernel driver is because it cannot operate in ACPI S3 mode (sleep wake)
     and because the UEFI firmwares provide very limited multicore support preventing the precise update of the MSR
     registers.
     </p></li>
     <li 
  class="enumerate" id="x1-71014x7"><tspan class="ec-lmtt-10">UnblockFsConnect</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Some firmwares block partition handles by opening them in By Driver mode, which results in File System
     protocols being unable to install.
     <!--l. 6129--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: The quirk is mostly relevant for select HP laptops with no drives listed.
</p>
     </li></ol>
<a 
 id="x1-71015r75"></a>
<h4 class="subsectionHead"><span class="titlemark">11.13   </span> <a 
 id="x1-7200013"></a>ReservedMemory Properties</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-72002x1"><tspan class="ec-lmtt-10">Address</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Start address of the reserved memory region, which should be allocated as reserved effectively
     marking the memory of this type inaccessible to the operating system.
     <!--l. 6144--><p class="noindent" >The  addresses  written  here  must  be  part  of  the  memory  map,  have  <tspan class="ec-lmtt-10">EfiConventionalMemory </tspan>type,  and
     page-aligned (4 KBs).
     </p><!--l. 6147--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: Some firmwares may not allocate memory areas used by S3 (sleep) and S4 (hibernation) code unless CSM
     is enabled causing wake failures. After comparing the memory maps with CSM disabled and enabled, these areas
     can be found in the lower memory and can be fixed up by doing the reservation. See <tspan class="ec-lmtt-10">Sample.plist </tspan>for more
     details.
     </p></li>
     <li 
  class="enumerate" id="x1-72004x2"><tspan class="ec-lmtt-10">Comment</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: Empty string<br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Arbitrary ASCII string used to provide human readable reference for the entry. It is implementation
     defined whether this value is used.
     </li>
     <li 
  class="enumerate" id="x1-72006x3"><tspan class="ec-lmtt-10">Size</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> integer</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">0</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Size of the reserved memory region, must be page-aligned (4 KBs).
                                                                                                  
                                                                                                  
     </li>
     <li 
  class="enumerate" id="x1-72008x4"><tspan class="ec-lmtt-10">Type</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> string</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">Reserved</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: Memory region type matching the UEFI specification memory descriptor types. Mapping:
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">Reserved </tspan>— <tspan class="ec-lmtt-10">EfiReservedMemoryType</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">LoaderCode </tspan>— <tspan class="ec-lmtt-10">EfiLoaderCode</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">LoaderData </tspan>— <tspan class="ec-lmtt-10">EfiLoaderData</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BootServiceCode </tspan>— <tspan class="ec-lmtt-10">EfiBootServicesCode</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">BootServiceData </tspan>— <tspan class="ec-lmtt-10">EfiBootServicesData</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">RuntimeCode </tspan>— <tspan class="ec-lmtt-10">EfiRuntimeServicesCode</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">RuntimeData </tspan>— <tspan class="ec-lmtt-10">EfiRuntimeServicesData</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Available </tspan>— <tspan class="ec-lmtt-10">EfiConventionalMemory</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">Persistent </tspan>— <tspan class="ec-lmtt-10">EfiPersistentMemory</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">UnusableMemory </tspan>— <tspan class="ec-lmtt-10">EfiUnusableMemory</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ACPIReclaimMemory </tspan>— <tspan class="ec-lmtt-10">EfiACPIReclaimMemory</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ACPIMemoryNVS </tspan>— <tspan class="ec-lmtt-10">EfiACPIMemoryNVS</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">MemoryMappedIO </tspan>— <tspan class="ec-lmtt-10">EfiMemoryMappedIO</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">MemoryMappedIOPortSpace </tspan>— <tspan class="ec-lmtt-10">EfiMemoryMappedIOPortSpace</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">PalCode </tspan>— <tspan class="ec-lmtt-10">EfiPalCode</tspan></li></ul>
     </li>
     <li 
  class="enumerate" id="x1-72010x5"><tspan class="ec-lmtt-10">Enabled</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Type</tspan>: <tspan class="ec-lmtt-10">plist</tspan><tspan class="ec-lmtt-10"> boolean</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Failsafe</tspan>: <tspan class="ec-lmtt-10">false</tspan><br 
class="newline" /><tspan class="ec-lmbx-10">Description</tspan>: This region will not be reserved unless set to <tspan class="ec-lmtt-10">true</tspan>.
     </li></ol>
<a 
 id="x1-72011r62"></a>
<h3 class="sectionHead"><span class="titlemark">12   </span> <a 
 id="x1-7300012"></a>Troubleshooting</h3>
<a 
 id="x1-73001r76"></a>
<h4 class="subsectionHead"><span class="titlemark">12.1   </span> <a 
 id="x1-740001"></a>Legacy Apple OS</h4>
<!--l. 6204--><p class="noindent" >Older operating systems may be more complicated to install, but sometimes can be necessary to use for all kinds of reasons.
While a compatible board identifier and CPUID are the obvious requirements for proper functioning of an older operating
system, there are many other less obvious things to consider. This section tries to cover a common set of issues relevant to
installing older macOS operating systems.
</p><!--l. 6211--><p class="noindent" >While newer operating systems can be downloaded over the internet, older operating systems did not have installation
media for every minor release, so to get a compatible distribution one may have to download a device-specific
image and mod it if necessary. To get the list of the bundled device-specific builds for legacy operating systems
one can visit this archived Apple Support <a 
href="https://web.archive.org/web/20170705003629/https://support.apple.com/en-us/HT204319" >article</a>. Since it is not always accurate, the latest versions are listed
below.
                                                                                                  
                                                                                                  
<a 
 id="x1-74001r1"></a>
</p>
<h5 class="subsubsectionHead"><span class="titlemark">12.1.1   </span> <a 
 id="x1-750001"></a>macOS 10.8 and 10.9</h5>
     <ul class="itemize1">
     <li class="itemize">Disk images on these systems use Apple Partitioning Scheme and will require the proprietary <tspan class="ec-lmtt-10">PartitionDxe</tspan>
     driver to run DMG recovery and installation. It is possible to set <tspan class="ec-lmtt-10">DmgLoading </tspan>to <tspan class="ec-lmtt-10">Disabled </tspan>to run the recovery
     without DMG loading avoiding the need for <tspan class="ec-lmtt-10">PartitionDxe</tspan>.
     </li>
     <li class="itemize">Cached  kernel  images  often  do  not  contain  family  drivers  for  networking  (<tspan class="ec-lmtt-10">IONetworkingFamily</tspan>)  or  audio
     (<tspan class="ec-lmtt-10">IOAudioFamily</tspan>) requiring the use of <tspan class="ec-lmtt-10">Force </tspan>loading in order to inject networking or audio drivers.</li></ul>
<a 
 id="x1-75001r79"></a>
<h5 class="subsubsectionHead"><span class="titlemark">12.1.2   </span> <a 
 id="x1-760002"></a>macOS 10.7</h5>
     <ul class="itemize1">
     <li class="itemize">All previous issues apply.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">SSSE3 </tspan>support (not to be confused with <tspan class="ec-lmtt-10">SSE3 </tspan>support) is a hard requirement for macOS 10.7 kernel.
     </li>
     <li class="itemize">Many kexts, including <tspan class="ec-lmtt-10">Lilu </tspan>when 32-bit kernel is used and a lot of <tspan class="ec-lmtt-10">Lilu </tspan>plugins, are unsupported on macOS 10.7
     and older as they require newer kernel APIs, which are not part of the macOS 10.7 SDK.
     </li>
     <li class="itemize">Prior to macOS 10.8 KASLR sliding is not supported, which will result in memory allocation failures on firmwares
     that utilise lower memory for their own purposes. Refer to <a 
href="https://github.com/acidanthera/bugtracker/issues/1125" >acidanthera/bugtracker#1125</a> for tracking.</li></ul>
<a 
 id="x1-76001r80"></a>
<h5 class="subsubsectionHead"><span class="titlemark">12.1.3   </span> <a 
 id="x1-770003"></a>macOS 10.6</h5>
     <ul class="itemize1">
     <li class="itemize">All previous issues apply.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">SSSE3 </tspan>support is a requirement for macOS 10.6 kernel with 64-bit userspace enabled. This limitation can mostly
     be lifted by enabling the <tspan class="ec-lmtt-10">LegacyCommpage </tspan>quirk.
     </li>
     <li class="itemize">Last  released  installer  images  for  macOS 10.6  are  macOS 10.6.7  builds  <tspan class="ec-lmtt-10">10J3250 </tspan>(for  <tspan class="ec-lmtt-10">MacBookPro8,x</tspan>)  and
     <tspan class="ec-lmtt-10">10J4139 </tspan>(for <tspan class="ec-lmtt-10">iMac12,x</tspan>), without Xcode). These images are limited to their target model identifiers and have no
     <tspan class="ec-lmtt-10">-no_compat_check </tspan>boot argument support. Modified images (with <tspan class="ec-lmtt-10">ACDT </tspan>suffix) without model restrictions can
     be found <a 
href="https://mega.nz/folder/z5YUhYTb#gA_IRY5KMuYpnNCg7kR3ug" >here</a>, assuming macOS 10.6 is legally owned. Read <tspan class="ec-lmtt-10">DIGEST.txt </tspan>for more details. Note that these are
     the earliest tested versions of macOS 10.6 with OpenCore.</li></ul>
<!--l. 6270--><p class="noindent" >Model checking may also be erased by editing <tspan class="ec-lmtt-10">OSInstall.mpkg </tspan>with e.g. <tspan class="ec-lmtt-10">Flat Package Editor </tspan>by making <tspan class="ec-lmtt-10">Distribution</tspan>
script to always return <tspan class="ec-lmtt-10">true </tspan>in <tspan class="ec-lmtt-10">hwbeModelCheck </tspan>function. Since updating the only file in the image and not corrupting other
files can be difficult and may cause slow booting due to kernel cache date changes, it is recommended to script image rebuilding
as shown below:
</p>
<!--l. 6277-->
<div class="lstlisting" id="listing-17"><span class="label"><a 
 id="x1-77001r1"></a></span><tspan class="ec-lmtti-10">#</tspan><tspan class="ec-lmtti-10">!/</tspan><tspan class="ec-lmtti-10">bin</tspan><tspan class="ec-lmtti-10">/</tspan><tspan class="ec-lmtti-10">bash</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77002r2"></a></span><tspan class="ec-lmtti-10">#</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">Original</tspan><tspan class="ec-lmtti-10">.</tspan><tspan class="ec-lmtti-10">dmg</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">is</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">original</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">image</tspan><tspan class="ec-lmtti-10">,</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">OSInstall</tspan><tspan class="ec-lmtti-10">.</tspan><tspan class="ec-lmtti-10">mpkg</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">is</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">patched</tspan><tspan class="ec-lmtti-10"> </tspan><tspan class="ec-lmtti-10">package</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77003r3"></a></span><tspan class="ec-lmtt-10">mkdir</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RO</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77004r4"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">mount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Original</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noverify</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautoopen</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautoopenrw</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautofsck</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">mountpoint</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RO</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77005r5"></a></span><tspan class="ec-lmtt-10">cp</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RO</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">DS_Store</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">DS_STORE</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77006r6"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">detach</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RO</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">force</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77007r7"></a></span><tspan class="ec-lmtt-10">rm</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">rf</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RO</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77008r8"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">convert</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Original</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">format</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDRW</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">o</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ReadWrite</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77009r9"></a></span><tspan class="ec-lmtt-10">mkdir</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77010r10"></a></span><tspan class="ec-lmtt-10">xattr</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">c</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OSInstall</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">mpkg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77011r11"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">mount</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ReadWrite</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noverify</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautoopen</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautoopenrw</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">noautofsck</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">mountpoint</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77012r12"></a></span><tspan class="ec-lmtt-10">cp</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OSInstall</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">mpkg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">System</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Installation</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">Packages</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">OSInstall</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">mpkg</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77013r13"></a></span><tspan class="ec-lmtt-10">killall</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Finder</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">fseventsd</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77014r14"></a></span><tspan class="ec-lmtt-10">rm</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">rf</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">fseventsd</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77015r15"></a></span><tspan class="ec-lmtt-10">cp</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">DS_STORE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10">/.</tspan><tspan class="ec-lmtt-10">DS_Store</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77016r16"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">detach</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">force</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77017r17"></a></span><tspan class="ec-lmtt-10">rm</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">rf</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">DS_STORE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">RW</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-77018r18"></a></span><tspan class="ec-lmtt-10">hdiutil</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">convert</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ReadWrite</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">format</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">UDZO</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">o</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ReadOnly</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">dmg</tspan>
</div>
<a 
 id="x1-77019r81"></a>
<h5 class="subsubsectionHead"><span class="titlemark">12.1.4   </span> <a 
 id="x1-780004"></a>macOS 10.5</h5>
     <ul class="itemize1">
                                                                                                  
                                                                                                  
     <li class="itemize">All previous issues apply.
     </li>
     <li class="itemize">This macOS version does not support <tspan class="ec-lmtt-10">x86_64 </tspan>kernel and requires <tspan class="ec-lmtt-10">i386 </tspan>kernel extensions and patches.
     </li>
     <li class="itemize">This macOS version uses the first (V1) version of <tspan class="ec-lmtt-10">prelinkedkernel</tspan>, which has kext symbol tables corrupted by
     the kext tools. This nuance renders <tspan class="ec-lmtt-10">prelinkedkernel </tspan>kext injection impossible in OpenCore. <tspan class="ec-lmtt-10">Mkext </tspan>kext injection
     will still work without noticeable performance drain and will be chosen automatically when <tspan class="ec-lmtt-10">KernelCache </tspan>is set
     to <tspan class="ec-lmtt-10">Auto</tspan>.
     </li>
     <li class="itemize">Last released installer image for macOS 10.5 is macOS 10.5.7 build <tspan class="ec-lmtt-10">9J3050 </tspan>(for <tspan class="ec-lmtt-10">MacBookPro5,3</tspan>). Unlike the
     others, this image is not limited to the target model identifiers and can be used as is. The original <tspan class="ec-lmtt-10">9J3050 </tspan>image
     can be found <a 
href="https://mega.nz/folder/inRBTarD#zanf7fUbviwz3WHBU5xpCg" >here</a>, assuming macOS 10.5 is legally owned. Read <tspan class="ec-lmtt-10">DIGEST.txt </tspan>for more details. Note that this is
     the earliest tested version of macOS 10.5 with OpenCore.</li></ul>
<a 
 id="x1-78001r82"></a>
<h5 class="subsubsectionHead"><span class="titlemark">12.1.5   </span> <a 
 id="x1-790005"></a>macOS 10.4</h5>
     <ul class="itemize1">
     <li class="itemize">All previous issues apply.
     </li>
     <li class="itemize">This  macOS  version  has  a  hard  requirement  to  access  all  the  optional  packages  on  the  second  DVD  disk
     installation media, requiring either two disks or USB media installation.
     </li>
     <li class="itemize">Last released installer images for macOS 10.4 are macOS 10.4.10 builds <tspan class="ec-lmtt-10">8R4061a </tspan>(for <tspan class="ec-lmtt-10">MacBookPro3,1</tspan>) and
     <tspan class="ec-lmtt-10">8R4088 </tspan>(for <tspan class="ec-lmtt-10">iMac7,1</tspan>)). These images are limited to their target model identifiers just like the newer macOS
     versions. Modified <tspan class="ec-lmtt-10">8R4088 </tspan>images (with <tspan class="ec-lmtt-10">ACDT </tspan>suffix) without model restrictions can be found <a 
href="https://mega.nz/folder/D3ASzLzA#7sjYXE2X09f6aGjol_C7dg" >here</a>, assuming
     macOS 10.4 is legally owned. Read <tspan class="ec-lmtt-10">DIGEST.txt </tspan>for more details. Note that these are the earliest tested versions
     of macOS 10.4 with OpenCore.</li></ul>
<a 
 id="x1-79001r78"></a>
<h4 class="subsectionHead"><span class="titlemark">12.2   </span> <a 
 id="x1-800002"></a>UEFI Secure Boot</h4>
<!--l. 6341--><p class="noindent" >OpenCore is designed to provide a secure boot chain between firmware and operating system. On most x86 platforms trusted
loading is implemented via <a 
href="https://en.wikipedia.org/wiki/UEFI_Secure_Boot" >UEFI Secure Boot</a> model. Not only OpenCore fully supports this model, but it also extends its
capabilities to ensure sealed configuration via <a 
href="#x1-4503712">vaulting</a> and provide trusted loading to the operating systems using custom
verification, such as <a 
href="#x1-4504714">Apple Secure Boot</a>. Proper secure boot chain requires several steps and careful configuration of select
settings as explained below:
     </p><ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-80002x1">Enable Apple Secure Boot by setting <tspan class="ec-lmtt-10">SecureBootModel </tspan>to run macOS. Note, that not every macOS is compatible
     with Apple Secure Boot and there are several other restrictions as explained in <a 
href="#x1-4504714">Apple Secure Boot</a> section.
     </li>
     <li 
  class="enumerate" id="x1-80004x2">Disable DMG loading by setting <tspan class="ec-lmtt-10">DmgLoading </tspan>to <tspan class="ec-lmtt-10">Disabled </tspan>if users have concerns of loading old vulnerable DMG
     recoveries. This is <tspan class="ec-lmbx-10">not </tspan>required, but recommended. For the actual tradeoffs see the details in <a 
href="#x1-450186">DMG loading</a>
     section.
     </li>
     <li 
  class="enumerate" id="x1-80006x3">Make sure that APFS JumpStart functionality restricts the loading of old vulnerable drivers by setting <tspan class="ec-lmtt-10">MinDate</tspan>
     and <tspan class="ec-lmtt-10">MinVersion </tspan>to <tspan class="ec-lmtt-10">0</tspan>. More details are provided in <a 
href="#x1-660007">APFS JumpStart</a> section. An alternative is to install <tspan class="ec-lmtt-10">apfs.efi</tspan>
     driver manually.
     </li>
     <li 
  class="enumerate" id="x1-80008x4">Make sure that <tspan class="ec-lmtt-10">Force </tspan>driver loading is not needed and all the operating systems are still bootable.
     </li>
     <li 
  class="enumerate" id="x1-80010x5">Make sure that <tspan class="ec-lmtt-10">ScanPolicy </tspan>restricts loading from undesired devices. It is a good idea to prohibit all removable
     drivers or unknown filesystems.
     </li>
                                                                                                  
                                                                                                  
     <li 
  class="enumerate" id="x1-80012x6">Sign all the installed drivers and tools with the private key. Do not sign tools that provide administrative access
     to the computer, like UEFI Shell.
     </li>
     <li 
  class="enumerate" id="x1-80014x7">Vault the configuration as explained <a 
href="#x1-4503712">Vaulting</a> section.
     </li>
     <li 
  class="enumerate" id="x1-80016x8">Sign all OpenCore binaries (<tspan class="ec-lmtt-10">BOOTX64.efi</tspan>, <tspan class="ec-lmtt-10">BOOTIa32.efi</tspan>, <tspan class="ec-lmtt-10">Bootstrap.efi</tspan>, <tspan class="ec-lmtt-10">OpenCore.efi</tspan>) used on this system
     with the same private key.
     </li>
     <li 
  class="enumerate" id="x1-80018x9">Sign all third-party operating system (not made by Microsoft or Apple) bootloaders if needed. For Linux there
     is an option to install Microsoft-signed Shim bootloader as explained on e.g. <a 
href="https://wiki.debian.org/SecureBoot" >Debian Wiki</a>.
     </li>
     <li 
  class="enumerate" id="x1-80020x10">Enable UEFI Secure Boot in firmware preferences and install the certificate with a private key. Details on how
     to generate a certificate can be found in various articles, like <a 
href="https://habr.com/en/post/273497" >this one</a>, and are out of the scope of this document.
     If Windows is needed one will also need to add the <a 
href="http://go.microsoft.com/fwlink/?LinkID=321192" >Microsoft Windows Production CA 2011</a>. To launch option
     ROMs or to use signed Linux drivers, <a 
href="http://go.microsoft.com/fwlink/?LinkId=321194" >Microsoft UEFI Driver Signing CA</a> will also be needed.
     </li>
     <li 
  class="enumerate" id="x1-80022x11">Password-protect changing firmware settings to ensure that UEFI Secure Boot cannot be disabled without the
     user’s knowledge.</li></ol>
<a 
 id="x1-80023r84"></a>
<h4 class="subsectionHead"><span class="titlemark">12.3   </span> <a 
 id="x1-810003"></a>Windows support</h4>
<!--l. 6393--><p class="noindent" ><tspan class="ec-lmbx-10">Can I install Windows?</tspan>
</p><!--l. 6395--><p class="noindent" >While no official Windows support is provided, 64-bit UEFI Windows installations (Windows 8 and above) prepared with Boot
Camp are supposed to work. Third-party UEFI installations as well as systems partially supporting UEFI boot, like Windows
7, might work with some extra precautions. Things to consider:
</p>
     <ul class="itemize1">
     <li class="itemize">MBR (Master Boot Record) installations are legacy and will not be supported.
     </li>
     <li class="itemize">All the modifications applied (to ACPI, NVRAM, SMBIOS, etc.) are supposed to be operating system agnostic,
     i.e. apply equally regardless of the OS booted. This enables Boot Camp software experience on Windows.
     </li>
     <li class="itemize">macOS requires the first partition to be EFI System Partition, and does not support the default Windows layout.
     While OpenCore does have a <a 
href="https://github.com/acidanthera/bugtracker/issues/327" >workaround</a> for this, it is highly recommend not to rely on it and install properly.
     </li>
     <li class="itemize">Windows may need to be reactivated. To avoid it consider setting SystemUUID to the original firmware UUID.
     Be warned, on old firmwares it may be invalid, i.e. not random. If there still are issues, consider using HWID or
     KMS38 license or making the use <tspan class="ec-lmtt-10">Custom UpdateSMBIOSMode</tspan>. Other nuances of Windows activation are out of
     the scope of this document and can be found online.</li></ul>
<!--l. 6417--><p class="noindent" ><tspan class="ec-lmbx-10">What additional software do I need?</tspan>
</p><!--l. 6419--><p class="noindent" >To enable operating system switching and install relevant drivers in the majority of cases Windows support software from <a 
href="https://support.apple.com/boot-camp" >Boot
Camp</a> is required. For simplicity of the download process or when configuring an already installed Windows version a
third-party utility, <a 
href="https://github.com/timsutton/brigadier" >Brigadier</a>, can be used successfully. Note, that <a 
href="https://www.7-zip.org" >7-Zip</a> may be downloaded and installed prior to using
Brigadier.
</p><!--l. 6427--><p class="noindent" >Remember to always use the latest version of Windows support software from Boot Camp, as versions prior to 6.1 do
not support APFS, and thus will not function correctly. To download newest software pass most recent Mac
model to Brigadier, for example <tspan class="ec-lmtt-10">./brigadier.exe -m iMac19,1</tspan>. To install Boot Camp on an unsupported Mac
model afterwards run PowerShell as Administrator and enter <tspan class="ec-lmtt-10">msiexec /i BootCamp.msi</tspan>. If there is a previous
version of Boot Camp installed it should be removed first by running <tspan class="ec-lmtt-10">msiexec /x BootCamp.msi </tspan>command.
<tspan class="ec-lmtt-10">BootCamp.msi </tspan>file is located in <tspan class="ec-lmtt-10">BootCamp/Drivers/Apple </tspan>directory and can be reached through Windows
Explorer.
                                                                                                  
                                                                                                  
</p><!--l. 6437--><p class="noindent" >While Windows support software from Boot Camp solves most of compatibility problems, the rest may still have to be
addressed manually:
</p>
     <ul class="itemize1">
     <li class="itemize">To invert mouse wheel scroll direction <tspan class="ec-lmtt-10">FlipFlopWheel </tspan>must be set to <tspan class="ec-lmtt-10">1 </tspan>as explained on <a 
href="https://superuser.com/a/364353" >SuperUser</a>.
     </li>
     <li class="itemize"><tspan class="ec-lmtt-10">RealTimeIsUniversal </tspan>must be set to <tspan class="ec-lmtt-10">1 </tspan>to avoid time desync between Windows and macOS as explained on
     <a 
href="https://superuser.com/q/494432" >SuperUser</a> (this is usually not needed).
     </li>
     <li class="itemize">To access Apple filesystems like HFS and APFS separate software may need to be installed. Some of the known
     utilities are: <a 
href="https://forums.macrumors.com/threads/apple-hfs-windows-driver-download.1368010/" >Apple HFS+ driver</a> (<a 
href="https://forums.macrumors.com/threads/apple-hfs-windows-driver-download.1368010/post-24180079" >hack for Windows 10</a>), <a 
href="http://www.catacombae.org/hfsexplorer" >HFSExplorer</a>, MacDrive, Paragon APFS, Paragon
     HFS+, TransMac, etc. Remember to never ever attempt to modify Apple file systems from Windows as this
     often leads to irrecoverable data loss.</li></ul>
<!--l. 6455--><p class="noindent" ><tspan class="ec-lmbx-10">Why do I see </tspan><tspan class="ec-lmtk-10">Basic data partition </tspan><tspan class="ec-lmbx-10">in Boot Camp Startup Disk control panel?</tspan>
</p><!--l. 6457--><p class="noindent" >Boot Camp control panel uses GPT partition table to obtain each boot option name. After installing Windows separately the
partition will have to be relabelled manually. This can be done with many utilities including open-source <a 
href="https://sourceforge.net/projects/gptfdisk" >gdisk</a> utility.
Reference example:
</p>
<!--l. 6462-->
<a 
 id="x1-81001r4"></a>
<a 
 id="x1-81002"></a>
<div class="lstlisting" id="listing-18"><span class="label"><a 
 id="x1-81003r1"></a></span><tspan class="ec-lmtt-10">PS</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">C</tspan><tspan class="ec-lmtt-10">:\</tspan><tspan class="ec-lmtt-10">gdisk</tspan><tspan class="ec-lmtt-10">&#x003E;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">.\</tspan><tspan class="ec-lmtt-10">gdisk64</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10">exe</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\\.\</tspan><tspan class="ec-lmtt-10">physicaldrive0</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81004r2"></a></span><tspan class="ec-lmtt-10">GPT</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">fdisk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">gdisk</tspan><tspan class="ec-lmtt-10">)</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">version</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1.0.4</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81005r3"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81006r4"></a></span><tspan class="ec-lmtt-10">Command</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(?</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">for</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">help</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">p</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81007r5"></a></span><tspan class="ec-lmtt-10">Disk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\\.\</tspan><tspan class="ec-lmtt-10">physicaldrive0</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">419430400</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sectors</tspan><tspan class="ec-lmtt-10">,</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">200.0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">GiB</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81008r6"></a></span><tspan class="ec-lmtt-10">Sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">size</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">logical</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">512</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">bytes</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81009r7"></a></span><tspan class="ec-lmtt-10">Disk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">identi</tspan><tspan class="ec-lmtt-10">fi</tspan><tspan class="ec-lmtt-10">er</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">GUID</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">DEC57EB1</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">B3B5</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">49</tspan><tspan class="ec-lmtt-10">B2</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">95</tspan><tspan class="ec-lmtt-10">F5</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">3</tspan><tspan class="ec-lmtt-10">B8C4D3E4E12</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81010r8"></a></span><tspan class="ec-lmtt-10">Partition</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">table</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">holds</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">up</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">128</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">entries</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81011r9"></a></span><tspan class="ec-lmtt-10">Main</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">table</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">begins</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">at</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">2</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">and</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">ends</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">at</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">33</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81012r10"></a></span><tspan class="ec-lmtt-10">First</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">usable</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">is</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">34,</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">last</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">usable</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">is</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">419430366</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81013r11"></a></span><tspan class="ec-lmtt-10">Partitions</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">will</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">be</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">aligned</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">on</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">2048</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">boundaries</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81014r12"></a></span><tspan class="ec-lmtt-10">Total</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">free</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">space</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">is</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4029</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">sectors</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(2.0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">MiB</tspan><tspan class="ec-lmtt-10">)</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81015r13"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81016r14"></a></span><tspan class="ec-lmtt-10">Number</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Start</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10">)</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">End</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">sector</tspan><tspan class="ec-lmtt-10">)</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Size</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Code</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Name</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81017r15"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">2048</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1023999</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">499.0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">MiB</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">2700</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Basic</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">data</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81018r16"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">2</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1024000</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1226751</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">99.0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">MiB</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">EF00</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">EFI</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">system</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81019r17"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">3</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1226752</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1259519</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">16.0</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">MiB</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">0</tspan><tspan class="ec-lmtt-10">C01</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Microsoft</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">reserved</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">...</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81020r18"></a></span><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">1259520</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">419428351</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">199.4</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">GiB</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">0700</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Basic</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">data</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81021r19"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81022r20"></a></span><tspan class="ec-lmtt-10">Command</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(?</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">for</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">help</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">c</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81023r21"></a></span><tspan class="ec-lmtt-10">Partition</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">number</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(1</tspan><tspan class="ec-lmtt-10">-</tspan><tspan class="ec-lmtt-10">4):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">4</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81024r22"></a></span><tspan class="ec-lmtt-10">Enter</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">name</tspan><tspan class="ec-lmtt-10">:</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">BOOTCAMP</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81025r23"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81026r24"></a></span><tspan class="ec-lmtt-10">Command</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(?</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">for</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">help</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">w</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81027r25"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81028r26"></a></span><tspan class="ec-lmtt-10">Final</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">checks</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtk-10">complete</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">About</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">write</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">GPT</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">data</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">THIS</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">WILL</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">OVERWRITE</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">EXISTING</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">PARTITIONS</tspan><tspan class="ec-lmtt-10">!!</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81029r27"></a></span><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81030r28"></a></span><tspan class="ec-lmtt-10">Do</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">you</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">want</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">proceed</tspan><tspan class="ec-lmtt-10">?</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">Y</tspan><tspan class="ec-lmtt-10">/</tspan><tspan class="ec-lmtt-10">N</tspan><tspan class="ec-lmtt-10">):</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">Y</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81031r29"></a></span><tspan class="ec-lmtt-10">OK</tspan><tspan class="ec-lmtt-10">;</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">writing</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">new</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">GUID</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">table</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">(</tspan><tspan class="ec-lmtt-10">GPT</tspan><tspan class="ec-lmtt-10">)</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">to</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">\\.\</tspan><tspan class="ec-lmtt-10">physicaldrive0</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81032r30"></a></span><tspan class="ec-lmtt-10">Disk</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">synchronization</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">succeeded</tspan><tspan class="ec-lmtt-10">!</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">The</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">computer</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">should</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">now</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">use</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">the</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">new</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">partition</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">table</tspan><tspan class="ec-lmtt-10">.</tspan><tspan class="ec-lmtt-10"> </tspan><br /><span class="label"><a 
 id="x1-81033r31"></a></span><tspan class="ec-lmtt-10">The</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">operation</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">has</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">completed</tspan><tspan class="ec-lmtt-10"> </tspan><tspan class="ec-lmtt-10">successfully</tspan><tspan class="ec-lmtt-10">.</tspan>
<figcaption class="caption" ><span class="id">Listing 4:</span><span  
class="content">Relabeling Windows volume</span></figcaption><!--tex4ht:label?: x1-81001r -->
</div>
<!--l. 6497--><p class="noindent" ><tspan class="ec-lmbx-10">How to choose Windows BOOTCAMP with custom NTFS drivers?</tspan>
</p><!--l. 6499--><p class="noindent" >Third-party drivers providing NTFS support, such as <a 
href="https://www.tuxera.com/community/open-source-ntfs-3g" >NTFS-3G</a>, Paragon NTFS, Tuxera NTFS or <a 
href="https://www.seagate.com/support/software/paragon" >Seagate Paragon Driver</a>
break certain macOS functionality, including <a 
href="https://support.apple.com/HT202796" >Startup Disk</a> preference pane normally used for operating system selection. While
the recommended option remains not to use such drivers as they commonly corrupt the filesystem, and prefer the driver
bundled with macOS with optional write support ( <a 
href="http://osxdaily.com/2013/10/02/enable-ntfs-write-support-mac-os-x" >command</a> or <a 
href="https://mounty.app" >GUI</a>), there still exist vendor-specific workarounds for their
products: <a 
href="https://www.tuxera.com/products/tuxera-ntfs-for-mac/faq" >Tuxera</a>, <a 
href="https://kb.paragon-software.com/article/6604" >Paragon</a>, etc.
<a 
 id="x1-81034r85"></a>
</p>
<h4 class="subsectionHead"><span class="titlemark">12.4   </span> <a 
 id="x1-820004"></a>Debugging</h4>
<!--l. 6515--><p class="noindent" >Similar to other projects working with hardware OpenCore supports auditing and debugging. The use of <tspan class="ec-lmtt-10">NOOPT </tspan>or <tspan class="ec-lmtt-10">DEBUG </tspan>build
modes instead of <tspan class="ec-lmtt-10">RELEASE </tspan>can produce a lot more debug output. With <tspan class="ec-lmtt-10">NOOPT </tspan>source level debugging with GDB or IDA Pro is
also available. For GDB check <a 
href="https://github.com/acidanthera/OpenCorePkg/tree/master/Debug" >OpenCore Debug</a> page. For IDA Pro, version 7.3 or newer is needed, and <a 
href="https://www.hex-rays.com/products/ida/support/tutorials/index.shtml" >Debugging the XNU
Kernel with IDA Pro</a> may also help.
</p><!--l. 6524--><p class="noindent" >To obtain the log during boot serial port debugging can be used. Serial port debugging is enabled in <tspan class="ec-lmtt-10">Target</tspan>,
e.g. <tspan class="ec-lmtt-10">0xB </tspan>for onscreen with serial. To initialise serial within OpenCore use <tspan class="ec-lmtt-10">SerialInit </tspan>configuration option.
For macOS the best choice is CP2102-based UART devices. Connect motherboard <tspan class="ec-lmtt-10">TX </tspan>to USB UART <tspan class="ec-lmtt-10">RX</tspan>, and
motherboard <tspan class="ec-lmtt-10">GND </tspan>to USB UART <tspan class="ec-lmtt-10">GND</tspan>. Use <tspan class="ec-lmtt-10">screen </tspan>utility to get the output, or download GUI software, such as
<a 
href="https://freeware.the-meiers.org" >CoolTerm</a>.
</p><!--l. 6532--><p class="noindent" ><tspan class="ec-lmri-10">Note</tspan>: On several motherboards (and possibly USB UART dongles) PIN naming may be incorrect. It is very common to have
<tspan class="ec-lmtt-10">GND </tspan>swapped with <tspan class="ec-lmtt-10">RX</tspan>, thus, motherboard “<tspan class="ec-lmtt-10">TX</tspan>” must be connected to USB UART <tspan class="ec-lmtt-10">GND</tspan>, and motherboard “<tspan class="ec-lmtt-10">GND</tspan>” to USB UART
<tspan class="ec-lmtt-10">RX</tspan>.
</p><!--l. 6537--><p class="noindent" >Remember to enable <tspan class="ec-lmtt-10">COM </tspan>port in firmware settings, and never use USB cables longer than 1 meter to avoid output corruption.
To additionally enable XNU kernel serial output <tspan class="ec-lmtt-10">debug=0x8 </tspan>boot argument is needed.
<a 
 id="x1-82001r87"></a>
                                                                                                  
                                                                                                  
</p>
<h4 class="subsectionHead"><span class="titlemark">12.5   </span> <a 
 id="x1-830005"></a>Tips and Tricks</h4>
     <ol  class="enumerate1" >
     <li 
  class="enumerate" id="x1-83002x1"><tspan class="ec-lmbx-10">How to debug boot failure?</tspan>
     <!--l. 6547--><p class="noindent" >Normally it is enough to obtain the actual error message. For this ensure that: </p>
         <ul class="itemize1">
         <li class="itemize">A <tspan class="ec-lmtt-10">DEBUG </tspan>or <tspan class="ec-lmtt-10">NOOPT </tspan>version of OpenCore is used.
         </li>
         <li class="itemize">Logging is enabled (<tspan class="ec-lmtt-10">1</tspan>) and shown onscreen (<tspan class="ec-lmtt-10">2</tspan>): <tspan class="ec-lmtt-10">Misc </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Debug </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Target </tspan><tspan class="rm-lmr-10">= </tspan><tspan class="ec-lmtt-10">3</tspan>.
         </li>
         <li class="itemize">Logged messages from at least <tspan class="ec-lmtt-10">DEBUG_ERROR </tspan>(<tspan class="ec-lmtt-10">0x80000000</tspan>), <tspan class="ec-lmtt-10">DEBUG_WARN </tspan>(<tspan class="ec-lmtt-10">0x00000002</tspan>), and <tspan class="ec-lmtt-10">DEBUG_INFO</tspan>
         (<tspan class="ec-lmtt-10">0x00000040</tspan>) levels are visible onscreen: <tspan class="ec-lmtt-10">Misc </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Debug </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">DisplayLevel </tspan><tspan class="rm-lmr-10">= </tspan><tspan class="ec-lmtt-10">0x80000042</tspan>.
         </li>
         <li class="itemize">Critical error messages, like <tspan class="ec-lmtt-10">DEBUG_ERROR</tspan>, stop booting: <tspan class="ec-lmtt-10">Misc </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Security </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">HaltLevel </tspan><tspan class="rm-lmr-10">= </tspan><tspan class="ec-lmtt-10">0x80000000</tspan>.
         </li>
         <li class="itemize">Watch Dog is disabled to prevent automatic reboot: <tspan class="ec-lmtt-10">Misc </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Debug </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">DisableWatchDog </tspan><tspan class="rm-lmr-10">= </tspan><tspan class="ec-lmtt-10">true</tspan>.
         </li>
         <li class="itemize">Boot Picker (entry selector) is enabled: <tspan class="ec-lmtt-10">Misc </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">Boot </tspan><tspan class="lmsy-10">→ </tspan><tspan class="ec-lmtt-10">ShowPicker </tspan><tspan class="rm-lmr-10">= </tspan><tspan class="ec-lmtt-10">true</tspan>.</li></ul>
     <!--l. 6570--><p class="noindent" >If there is no obvious error, check the available hacks in <tspan class="ec-lmtt-10">Quirks </tspan>sections one by one. For early boot troubleshooting, for
     instance, when OpenCore menu does not appear, using <tspan class="ec-lmtt-10">UEFI Shell </tspan>(bundled with OpenCore) may help to see early
     debug messages.
     </p></li>
     <li 
  class="enumerate" id="x1-83004x2"><tspan class="ec-lmbx-10">How to debug macOS boot failure?</tspan>
         <ul class="itemize1">
         <li class="itemize">Refer to <tspan class="ec-lmtt-10">boot-args </tspan>values like <tspan class="ec-lmtt-10">debug=0x100</tspan>, <tspan class="ec-lmtt-10">keepsyms=1</tspan>, <tspan class="ec-lmtt-10">-v</tspan>, and similar.
         </li>
         <li class="itemize">Do not forget about <tspan class="ec-lmtt-10">AppleDebug </tspan>and <tspan class="ec-lmtt-10">ApplePanic </tspan>properties.
         </li>
         <li class="itemize">Take care of <tspan class="ec-lmtt-10">Booter</tspan>, <tspan class="ec-lmtt-10">Kernel</tspan>, and <tspan class="ec-lmtt-10">UEFI </tspan>quirks.
         </li>
         <li class="itemize">Consider using serial port to inspect early kernel boot failures. For this <tspan class="ec-lmtt-10">debug=0x108</tspan>, <tspan class="ec-lmtt-10">serial=5</tspan>, and
         <tspan class="ec-lmtt-10">msgbuf=1048576 </tspan>boot arguments are needed. Refer to the patches in Sample.plist when dying before serial
         init.
         </li>
         <li class="itemize">Always read the logs carefully.</li></ul>
     </li>
     <li 
  class="enumerate" id="x1-83006x3"><tspan class="ec-lmbx-10">How to customise boot entries?</tspan>
     <!--l. 6593--><p class="noindent" >OpenCore follows standard Apple Bless model and extracts the entry name from <tspan class="ec-lmtt-10">.contentDetails </tspan>and
     <tspan class="ec-lmtt-10">.disk_label.contentDetails </tspan>files in the booter directory if present. These files contain an ASCII string with an entry
     title, which may then be customised by the user.
     </p></li>
     <li 
  class="enumerate" id="x1-83008x4"><tspan class="ec-lmbx-10">How to choose the default boot entry?</tspan>
     <!--l. 6601--><p class="noindent" >OpenCore uses the primary UEFI boot option to select the default entry. This choice can be altered from UEFI Setup,
     with the macOS <a 
href="https://support.apple.com/HT202796" >Startup Disk</a> preference, or the Windows <a 
href="https://support.apple.com/guide/bootcamp-control-panel/start-up-your-mac-in-windows-or-macos-bcmp29b8ac66/mac" >Boot Camp</a> Control Panel. Since choosing OpenCore’s
     <tspan class="ec-lmtt-10">BOOTx64.EFI </tspan>as a primary boot option limits this functionality in addition to several firmwares deleting
     incompatible boot options, potentially including those created by macOS, users are strongly encouraged to
     use the <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>quirk, which will preserve the selection made in the operating system
     within the OpenCore variable space. Note, that <tspan class="ec-lmtt-10">RequestBootVarRouting </tspan>requires a separate driver for
     functioning.
     </p></li>
     <li 
  class="enumerate" id="x1-83010x5"><a 
 id="x1-830095"></a> <tspan class="ec-lmbx-10">What is the simplest way to install macOS?</tspan>
                                                                                                  
                                                                                                  
     <!--l. 6615--><p class="noindent" >Copy online recovery image (<tspan class="ec-lmtt-10">*.dmg </tspan>and <tspan class="ec-lmtt-10">*.chunklist </tspan>files) to <tspan class="ec-lmtt-10">com.apple.recovery.boot </tspan>directory on a FAT32 partition
     with OpenCore. Load OpenCore Boot Picker and choose the entry, it will have a <tspan class="ec-lmtt-10">(dmg) </tspan>suffix. Custom name may be
     created by providing <tspan class="ec-lmtt-10">.contentDetails </tspan>file.
     </p><!--l. 6620--><p class="noindent" >To download recovery online <a 
href="https://github.com/acidanthera/OpenCorePkg/blob/master/Utilities/macrecovery/macrecovery.py" >macrecovery.py</a> can be used.
     </p><!--l. 6624--><p class="noindent" >For offline installation refer to <a 
href="https://support.apple.com/HT201372" >How to create a bootable installer for macOS</a> article. Apart from App Store and
     <tspan class="ec-lmtt-10">softwareupdate </tspan>utility there also are <a 
href="https://github.com/corpnewt/gibMacOS" >third-party utilities</a> to download an offline image.
     </p></li>
     <li 
  class="enumerate" id="x1-83012x6"><tspan class="ec-lmbx-10">Why do online recovery images (</tspan><tspan class="ec-lmtk-10">*.dmg</tspan><tspan class="ec-lmbx-10">) fail to load?</tspan>
     <!--l. 6632--><p class="noindent" >This may be caused by missing HFS+ driver, as all presently known recovery volumes have HFS+ filesystem.
     </p></li>
     <li 
  class="enumerate" id="x1-83014x7"><tspan class="ec-lmbx-10">Can I use this on Apple hardware or virtual machines?</tspan>
     <!--l. 6638--><p class="noindent" >Sure, most relatively modern Mac models including <tspan class="ec-lmtt-10">MacPro5,1 </tspan>and virtual machines are fully supported. Even though
     there are little to none specific details relevant to Mac hardware, some ongoing instructions can be found on
     <a 
href="https://forums.macrumors.com/threads/opencore-on-the-mac-pro.2207814" >MacRumors.com</a>.
     </p></li>
     <li 
  class="enumerate" id="x1-83016x8"><tspan class="ec-lmbx-10">Why do Find&#x0026;Replace patches must equal in length?</tspan>
     <!--l. 6646--><p class="noindent" >For machine code (x86 code) it is not possible to do differently sized replacements due to <a 
href="https://en.wikipedia.org/w/index.php?title=Relative_addressing" >relative addressing</a>. For ACPI
     code this is risky, and is technically equivalent to ACPI table replacement, thus not implemented. More detailed
     explanation can be found on <a 
href="https://applelife.ru/posts/819790" >AppleLife.ru</a> or in the ACPI section of this document.
     </p></li>
     <li 
  class="enumerate" id="x1-83018x9"><tspan class="ec-lmbx-10">How can I decide which </tspan><tspan class="ec-lmtk-10">Booter </tspan><tspan class="ec-lmbx-10">quirks to use?</tspan>
     <!--l. 6655--><p class="noindent" >These quirks originate from <tspan class="ec-lmtt-10">AptioMemoryFix </tspan>driver but provide a wider set of changes specific to modern systems. Note,
     that <tspan class="ec-lmtt-10">OpenRuntime </tspan>driver is required for most configurations. To get a configuration similar to <tspan class="ec-lmtt-10">AptioMemoryFix </tspan>the
     following set of quirks should be enabled: </p>
         <ul class="itemize1">
         <li class="itemize"><tspan class="ec-lmtt-10">ProvideConsoleGop </tspan>(UEFI quirk)
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">AvoidRuntimeDefrag</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">DiscardHibernateMap</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">EnableSafeModeSlide</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">EnableWriteUnprotector</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ForceExitBootServices</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ProtectMemoryRegions</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">ProvideCustomSlide</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">RebuildAppleMemoryMap</tspan>
         </li>
         <li class="itemize"><tspan class="ec-lmtt-10">SetupVirtualMap</tspan></li></ul>
     <!--l. 6673--><p class="noindent" >However, as of today such set is strongly discouraged as some of these quirks are not necessary to be enabled or need
     additional quirks. For example, <tspan class="ec-lmtt-10">DevirtualiseMmio </tspan>and <tspan class="ec-lmtt-10">ProtectUefiServices </tspan>are often required, while
     <tspan class="ec-lmtt-10">DiscardHibernateMap </tspan>and <tspan class="ec-lmtt-10">ForceExitBootServices </tspan>are rarely necessary.
     </p><!--l. 6679--><p class="noindent" >Unfortunately for some quirks like <tspan class="ec-lmtt-10">RebuildAppleMemoryMap</tspan>, <tspan class="ec-lmtt-10">EnableWriteUnprotector</tspan>, <tspan class="ec-lmtt-10">ProtectMemoryRegions</tspan>,
     <tspan class="ec-lmtt-10">SetupVirtualMap</tspan>, and <tspan class="ec-lmtt-10">SyncRuntimePermissions </tspan>there is no definite approach even on similar systems, so trying all
     their combinations may be required for optimal setup. Refer to individual quirk descriptions in this document for more
     details.
                                                                                                  
                                                                                                  
</p>
     </li></ol>
 
</body> 
</html>
                                                                                                  
                                                                                                  
                                                                                                  


